Pregunta

acabo comenzado a experimentar con el proyecto DotNetOpenAuth. La modificación de la muestra OpenIdRelyingPartyMvc proyecto, yo era capaz de conseguir un ClaimRequest para correo electrónico para trabajar con Google.

Sin embargo, cuando traté de añadir OpenID para mi propio proyecto, el ClaimResponse siempre vuelve nula. Me pregunto si hay un proyecto de ajuste o ambiente que me falta?

Esta es mi método Authenticate:

public ActionResult Authenticate(string returnUrl)
{
    var response = openid.GetResponse();
    if (response == null)
    {
        // Stage 2: user submitting Identifier
        Identifier id;
        if (Identifier.TryParse(Request.Form["openid_identifier"], out id))
        {
            try
            {
                IAuthenticationRequest req = openid.CreateRequest(Request.Form["openid_identifier"]);
                req.AddExtension(new ClaimsRequest { Email = DemandLevel.Require });
                return req.RedirectingResponse.AsActionResult();
            }
            catch (ProtocolException ex)
            {
                ViewData["Message"] = ex.Message;
                return View("Login");
            }
        }
        else
        {
            ViewData["Message"] = "Invalid identifier";
            return View("Login");
        }
    }
    else
    {
        // Stage 3: OpenID Provider sending assertion response
        switch (response.Status)
        {
            case AuthenticationStatus.Authenticated:
                ClaimsResponse sreg = response.GetExtension<ClaimsResponse>();
                if (sreg != null)
                {
                    var email = sreg.Email;
                    Session["Email"] = email;
                }
                Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);
                if (!string.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
            case AuthenticationStatus.Canceled:
                ViewData["Message"] = "Canceled at provider";
                return View("Login");
            case AuthenticationStatus.Failed:
                ViewData["Message"] = response.Exception.Message;
                return View("Login");
        }
    }
    return new EmptyResult();
}

}

¿Fue útil?

Solución

<configuration>
       <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>
    </configuration>

http://dotnetopenauth.net:8000/wiki/CodeSnippets/OpenIDRP/AXFetchAsSregTransform

Agregue la información de configuración para su web.config.

  

Google tiene un rasgo único, ya que no tiene en cuenta todas las solicitudes de atributos marcados como 'opcional'. Debe solicitar la dirección de correo electrónico del usuario como 'necesaria' con el fin de conseguir nunca una dirección de correo electrónico de Google. Tenga cuidado sin embargo, que al marcar el atributo según sea necesario, Google se negará a autenticar al usuario a menos que el usuario está dispuesto a renunciar a su dirección de correo electrónico. Así que si en realidad no se necesita la dirección de correo electrónico, puede que sea mejor para marcarlo como opcional, y simplemente renunciar a la reciba de sus usuarios de Google con el fin de evitar perseguir a los usuarios de distancia, obligándoles a renunciar a su dirección de correo electrónico si no quieren.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top