Tengo una api proyecto específico en un grande .net MVC 5 solución web. Yo estoy utilizando el WebApi2 plantillas de la caja para autenticar a un usuario a través de la api. El uso de las cuentas individuales para la autenticación, el cuerpo de solicitud necesarios para obtener un token de acceso es:

grant_type=password&username={someuser}&password={somepassword}

Esto funciona como se esperaba.

Sin embargo, tengo que añadir una 3ª dimensión a la andamiaje método «GrantResourceOwnerCredentials». Además de comprobar el nombre de usuario/contraseña, necesito agregar un id de dispositivo, el cual está destinado a restringir el acceso de una cuenta de usuario a un dispositivo específico. Lo que no está claro es cómo agregar los siguientes parámetros de solicitud a la ya definida «OAuthGrantResourceOwnerCredentialscontext». En este contexto, en la actualidad, abre el espacio para el nombre de Usuario y Contraseña, pero obviamente voy a tener que incluir más.

Mi pregunta es simple, ¿hay una manera estándar de ampliar los requisitos de inicio de sesión para el OWIN OAuth2 solicitud de token para incluir más datos? Y, ¿cómo se forma fiable de hacerlo en una .NET WebApi2 medio ambiente?

InformationsquelleAutor nak5ive | 2014-01-20

1 Comentario

  1. 93

    Como a menudo es el caso, he encontrado la respuesta inmediatamente después de enviar la pregunta…

    ApplicationOAuthProvider.cs contiene el código siguiente out-of-the-box

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        using (UserManager<IdentityUser> userManager = _userManagerFactory())
        {
            IdentityUser user = await userManager.FindAsync(context.UserName, context.Password);
    
            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }
    
            ClaimsIdentity oAuthIdentity = await userManager.CreateIdentityAsync(user,
                context.Options.AuthenticationType);
            ClaimsIdentity cookiesIdentity = await userManager.CreateIdentityAsync(user,
                CookieAuthenticationDefaults.AuthenticationType);
            AuthenticationProperties properties = CreateProperties(context.UserName, data["udid"]);
            AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
            context.Validated(ticket);
            context.Request.Context.Authentication.SignIn(cookiesIdentity);
        }
    }

    Simplemente agregando

    var data = await context.Request.ReadFormAsync();

    dentro del método, usted puede tener acceso a todos los escritos de las variables en el cuerpo de solicitud y el uso de ellos como quieras. En mi caso, he colocado inmediatamente después de que el null-comprobar que el usuario realice una más restrictiva de control de seguridad.

    Espero que esto ayude a alguien!

    • var data = await context.Request.ReadFormAsync(); realmente me ayudó.

Dejar respuesta

Please enter your comment!
Please enter your name here