L'ajout de la logique supplémentaire pour le Porteur de l'autorisation

Je tente de mettre en œuvre OWIN porteur du jeton d'autorisation, et sur la base cet article. Cependant, il y a une autre information dont j'ai besoin porteur du jeton que je ne sais pas comment la mettre.

Dans mon application, j'ai besoin d'en déduire le porteur du jeton de l'utilisateur (dire userid). Ceci est important parce que je ne veux pas un utilisateur autorisé d'être en mesure d'agir en tant qu'un autre utilisateur. Est-ce faisable? Est-il même la bonne approche? Si le code d'utilisateur est un guid, alors ce serait simple. C'est un entier dans ce cas.
Un utilisateur autorisé peut, potentiellement, d'usurper l'identité d'un autre juste en devinant /la force brute, ce qui est inacceptable.

En regardant ce code:

public void ConfigureOAuth(IAppBuilder app)
{
    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
        Provider = new SimpleAuthorizationServerProvider()
    };

    //Token Generation
    app.UseOAuthAuthorizationServer(OAuthServerOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.Validated();
    }

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        using (AuthRepository _repo = new AuthRepository())
        {
            IdentityUser user = await _repo.FindUser(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim("sub", context.UserName));
        identity.AddClaim(new Claim("role", "user"));

        context.Validated(identity);
    }
}

Je pense qu'il est possible de remplacer l'autorisation et d'authentification pour accueillir ce dont j'ai besoin?

Vous pouvez utiliser ce qui suit pour obtenir le nom d'utilisateur d'un utilisateur stackoverflow.com/a/19506296/299327.

OriginalL'auteur Echiban | 2014-06-21