web-dev-qa-db-ja.com

サーバー側でカスタムOauth2アクセストークンを検証するにはどうすればよいですか

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);
    }
}

ログイン時間このSimpleAuthorizationServerProvider(Web Api内)を使用しています。アクセストークンを取得してクライアントに送信できます。再度、ログインユーザーは他のページにアクセスする必要があります。サーバー側(Web Api)でカスタムOauth2アクセストークンを検証するにはどうすればよいですか?

クライアント側から私はこのような生成トークンです

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;
}

そして、このような認証の後に特定のWebAPIを呼び出します

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
b_in_U

実際、OWINはほとんどすべてを処理します。 ASP.NET APIv2サーバーを使用して要求を受信する場合。トークンをhttpリクエストで正しい形式で渡す必要があります。

1。 httpリクエストを送信する

トークンを渡す方法は2つあります。

2。リクエストを認証します

(ClaimsPrincipal)Thread.CurrentPrincipal.Identity.IsAuthenticatedを使用して、requested tokenが有効かどうかを確認できます

3。リクエストを承認します

[Authorize]属性を使用することも、独自のAuthorizeAttributeを作成することもできます。

独自の属性を実装すると、さらに興味深いことができます。データベースに接続して複雑な認証を行うことです。

これは、ASP.NET Web APIのOAUTH2から始めるのに適したドキュメントだと思います: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api -2-owin-asp-net-identity /

2
Hung Doan