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;
}
答案 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/