Как получить письмо от провайдера Google OpenID (в VB) - PullRequest
2 голосов
/ 22 декабря 2011

Салам всем
Я использую элемент управления DotNetOpenAuth для аутентификации от Google. Это код, который я использую.

<rp:OpenIdLogin ID="OID" runat=server Identifier="https://www.google.com/accounts/o8/id" RequestEmail="Require" ></rp:OpenIdLogin>

Чтобы получить ответ от провайдера для идентификатора электронной почты, я использую этот код в событии загрузки страницы default.aspx

 Public Email As String = "N/A"

    Public FullName As String = "N/A"

    Public Country As String = "N/A"

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim openid As OpenIdRelyingParty = New OpenIdRelyingParty
        Dim response = openid.GetResponse
        If (Not (response) Is Nothing) Then
            Select Case (response.Status)
                Case AuthenticationStatus.Authenticated
                    Dim fetch = response.GetExtension
                    Dim email As String = String.Empty
                    If (Not (fetch) Is Nothing) Then
                        email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email)
                    End If
                    FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, False)
            End Select
        End If


    End Sub

Я могу пройти проверку подлинности с помощью Google, но нет ответа от идентификатора электронной почты от Google.
Пожалуйста, скажите мне, что именно мне не хватает, что вызывает эту проблему.

Обновление

  <configSections>
    <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
  </configSections>
  <dotNetOpenAuth>
    <openid>
      <relyingParty>
        <behaviors>
          <!-- The following OPTIONAL behavior allows RPs to use SREG only, but be compatible
                    with OPs that use Attribute Exchange (in various formats). -->
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
        </behaviors>
      </relyingParty>
    </openid>
  </dotNetOpenAuth>

1 Ответ

2 голосов
/ 22 декабря 2011

Вероятно, вам не хватает соответствующего «поведения» в вашем файле web.config. Пожалуйста, изучите эту страницу и примените ее к своему сайту: https://github.com/DotNetOpenAuth/DotNetOpenAuth/wiki/Enhancements

Кроме того, при использовании этого поведения вы должны искать расширение ClaimsResponse в ответе положительной аутентификации, а не FetchResponse.

В качестве примечания, у вас есть много стандартного кода в методе Page_Load вашего кода, который вам не нужен. OpenIdControl, который вы используете, имеет метод LoggedIn, который выполняет большую часть того, что вы делаете здесь (он доставляет вас до тела вашего блока Case.

...