0

我可能在这里遗漏了一些非常明显的东西,所以这就是为什么我要问我的问题……希望有人能看到我遗漏的东西。上周我刚刚第一次了解了 OAuth,我正在尝试使用它(在这种情况下)在某人登录并授权后从他们那里提取联系人列表。

这是我首先尝试的,使用 Google .NET 库:

        Sub InviteGmailContactsOld()

    Call google_api.GetClientCredentials(Vars.Server_name)
    Dim Input_URL As String = google_api.Token_Request_URL & "?scope=" & OverrideEncode("https://www.google.com/m8/feeds/") & "&oauth_callback=" & OverrideEncode(Vars.Site_Root & "my-profile/manage-connections/invite-connections/google/")
    Dim Input_URI As New Uri(Input_URL)
    Dim Authenticator As OAuth3LeggedAuthenticator = New OAuth3LeggedAuthenticator("Politistream API", google_api.Client_ID, google_api.Client_Secret, String.Empty, String.Empty)
    Dim Auth_Request As WebRequest = Authenticator.CreateHttpWebRequest("GET", Input_URI)
    Dim Final_Request As WebRequest = WebRequest.Create(Input_URI)
    Dim Auth_Headers As String = Auth_Request.Headers.ToString()
    Final_Request.Headers.Add(Auth_Headers)
    Final_Request.Method = "GET"
    Response.Write(Final_Request.Headers.ToString() & " <br />" & Final_Request.RequestUri.ToString & "<br />")
    Dim Auth_Response As String = Common.WebRequestToStringResponse(Final_Request)

End Sub

尝试了几种变体,无论我做什么,我从谷歌得到的只是 400 Bad Request。

然后我尝试了 DotNetOpenAuth:

        Sub InviteGmailContacts()
    ' GMail uses openID because OAuth doesn't work properly.

    Dim openId As New OpenIdRelyingParty
    Call google_api.GetClientCredentials(Vars.Server_name)
    Dim New_URL As UriBuilder = New UriBuilder(Request.Url.ToString)
    Dim Auth_Request As IAuthenticationRequest = openId.CreateRequest(google_api.OpenID_Login_URL, New_URL.Uri, New_URL.Uri)
    Auth_Request.RedirectToProvider()

End Sub

这行得通,我能够取回声称的标识符。我不知道的问题是我完全不知道我应该用它做什么,而且我在任何地方都找不到任何我可以遵循的东西,或多或少地自己做。

理想情况下,我正在寻找的是一个不一定完整的代码示例,但至少足够连贯,我可以到达我想去的地方。如果做不到这一点,一个比正常水平低三个阴影的解释就足够了。

谢谢。

4

1 回答 1

2

您将 OAuth(在您的第一个代码片段中与 Google 一起使用)与 OpenID(在您的第二个代码片段中)混淆了。正如您所注意到的,OpenID 为您提供了一个“已声明的标识符”,它不适合下载联系人——它有助于在用户稍后返回时识别用户。OpenID 用于身份验证,而 OAuth 用于授权

由于您要访问 Google 通讯录,这是一种授权方案,因此您需要 OAuth。DotNetOpenAuth 也执行 OAuth,实际上有一个用于下载联系人的示例(尽管在 C# 中)。

下载 dotnetopenauth并查看 OAuthConsumerWpf 示例。它有一个标签,用于演示下载 Google 通讯录。它使用 DotNetOpenAuth.ApplicationBlock 示例(名为 的类GoogleConsumer)中的代码,希望能启发您在应用程序中可以做什么。

于 2012-04-21T22:00:45.787 回答