【问题标题】:Forms authentication to create bearer tokens for Web API?表单身份验证为 Web API 创建不记名令牌?
【发布时间】:2014-11-20 10:18:25
【问题描述】:
我们有一个 .NET Web 表单项目,该项目使用我们的网站运行的 sql 成员表单身份验证。我们现在正在尝试建立一个 Web API 2 项目,并希望使用该 API 的用户使用他们的网站凭据来验证他们对 API 的调用。
- 我们是否必须将我们的网站更新为身份验证? ...或
- 我们是否可以使用我们现有的成员身份/表单身份验证来验证用户,然后给他们一个令牌,以便他们可以用于后续调用?
在这两种情况下,我该如何实现该场景?
感谢您的帮助!
【问题讨论】:
标签:
asp.net-web-api
forms-authentication
【解决方案1】:
- 无需升级 ASP.NET Identity,您可以与会员提供商合作
- 您可以使用您的旧会员资格提供商来验证用户名和密码,通过查看下面的代码,您需要使用您的 memebership.validate 用户方法更改以 (**) 为前缀的代码行,仅此而已。
您可以在我的详细Token based Authentication Post中阅读更多相关信息
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
using (AuthRepository _repo = new AuthRepository())
{
**IdentityUser user = await _repo.FindUser(context.UserName, context.Password);**
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}