[英]Retrieve bearer token in ASP.NET WebAPI
我有一个启用了身份验证的 Web API(承载令牌)。 这是由客户端应用程序调用的,我想保护它免受匿名使用,因此我想创建一个用户并为其创建一个不记名令牌。
我可以通过调用register和token方法来创建令牌,但我想从代码中做到这一点。
据我所知,不记名令牌未存储在数据库中。 可以使用 ASP.NET Identity API 以某种方式检索它吗?
我还想从代码创建此用户并将令牌保存在某处,因为我需要将数据库部署到多个服务器。
如果您只有一个客户端会与您的 API 对话,我不建议您采用这种方法,我的理解是您需要发布一个非常长的访问令牌,可能持续一年,并继续使用此令牌访问后端API,对吧? 如果此令牌被盗,您会怎么做? 您无法撤销访问令牌,因此它在某种程度上类似于您的主密钥(密码)。 我的建议是使用 OAuth 刷新令牌和访问令牌。 这取决于您的客户端类型,您可以在此处查看这是如何完成的http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web -api-2-owin/刷新令牌可以被撤销,它们可以在很长一段时间后过期。 如果您需要更多细节来实现这一点,请告诉我。
创建自定义身份验证属性并存储用户的令牌哈希。 一个用户可以拥有多个令牌。 然后你可以让用户做他想做的事 - 当密码更改时注销所有其他会话或有选择地删除会话
public class CustomAuthAttribute : System.Web.Http.AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
var accessToken = HttpContext.Current.Request.Headers["Authorization"];
var hash = accessToken.Md5();
//store the hash for that user
//check if the hash is created before the password change or its session was removed by the user
//store IP address and user agent
var isBlackListed = ...
.....
return !isBlackListed && base.IsAuthorized(context);
}
}
如果您需要在 WebAPI 控制器函数中解码令牌,我发现这有效:
String token = Request.Headers.Authorization.Parameter;
Microsoft.Owin.Security.AuthenticationTicket t = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.