Comment puis-je valider mon token d'accès personnalisé OAuth2 du côté du serveur

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        bool isvalidUser = AuthenticateUser(context.UserName, context.Password);// validate my user&password
        if (!isvalidUser)
        {
            context.Rejected();
            return;
        }
        // create identity
        var id = new ClaimsIdentity(context.Options.AuthenticationType);
        id.AddClaim(new Claim("sub", context.UserName));
        id.AddClaim(new Claim("role", "user"));

        // create metadata to pass on to refresh token provider
        var props = new AuthenticationProperties(new Dictionary<string, string>
            {
                { "as:client_id", context.ClientId }
            });

        var ticket = new AuthenticationTicket(id, props);
        context.Validated(ticket);
    }
}

temps D'ouverture de session j'utilise ce SimpleAuthorizationServerProvider (dans L'Api Web) que je peux obtenir et envoyer le token d'accès au client. Une fois de plus, L'utilisateur doit se connecter pour accéder à D'autres Pages, Comment puis-je valider mon token d'accès personnalisé Oauth2 côté serveur (dans L'Api Web)

Du côté Client, je suis de la génération du jeton comme ceci

private static TokenResponse GetToken()
{
    var client = new OAuth2Client(new Uri("http://localhost:1142/token"), "client1", "secret");
    var response = client.RequestResourceOwnerPasswordAsync(uid, pwd).Result;
    Console.WriteLine(response.AccessToken);
    return response;
}

et appeler une api web particulière après authentification comme ceci

private static void CallProfile(string token)
{
    var client = new HttpClient();
    client.SetBearerToken(token);
    var response = client.GetStringAsync(new Uri("http://localhost:1142/api/Profile?id=1")).Result;
}
14
demandé sur abatishchev 2014-04-29 15:30:43

1 réponses

en fait, OWIN s'occupe de presque tout pour vous. Si vous utilisez ASP.NET API V2 Server to receives requests. Vous avez juste à passer votre token dans vos requêtes http dans le bon format.

1. Envoyer une requête http

Il y a 2 façons de passer votre jeton :

2. Authentifiez votre demande

Vous pouvez utiliser (ClaimsPrincipal)Thread.CurrentPrincipal.Identity.IsAuthenticated pour vérifier si le requested token valide

3. Autoriser votre demande

Vous pouvez utiliser [Authorize] l'attribut ou Vous pouvez écrire votre propre AuthorizeAttribute

si vous implémentez votre propre attribut, vous pouvez faire des choses plus intéressantes: vous connecter à la base de données pour faire des autorisations complexes.

je pense que C'est un bon document pour commencer avec OAUTH2 dans ASP.NET Api Web: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

2
répondu Hung Doan 2017-05-23 11:47:07