如何在服务器端验证我的自定义Oauth2访问令牌

时间:2014-04-29 11:30:44

标签: c# asp.net-web-api oauth-2.0 authorization access-token

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中)我可以获取并向客户端发送访问令牌。     再次登录用户需要访问其他页面,如何在服务器端验证我的自定义Oauth2访问令牌(在Web Api中)

从客户端我这样生成令牌

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

在认证之后调用特定的web api

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

1 个答案:

答案 0 :(得分:2)

实际上,OWIN几乎可以处理所有事情。 如果使用ASP.NET API v2 Server来接收请求。您只需以正确的格式在您的http请求中传递令牌。

<强> 1。发送http请求

有两种传递令牌的方法:

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