【发布时间】:2014-07-13 20:50:48
【问题描述】:
我想在我的网站上允许两种类型的身份验证: * 表单验证:用户使用表单中的详细信息登录。应使用 cookie 进行身份验证。 * Bearer:在调用 WebAPI(用于移动设备)时,应仅使用不记名令牌进行身份验证。
我已经转达了 SPA 模板和 SO 中的一些问题,并成功地使其可用。 我面临的唯一问题是 ClaimsIdentity:我希望使用自定义身份类。但是,我只能在表单身份验证中这样做,而不是在承载 WebAPI 请求中这样做。
我的自定义身份:
public class MyIdentity : ClaimsIdentity, IMyIdentity
{
#region IMyIdentity
private Account _account = null;
public Account Account
{
get
{
if (_account == null)
{
if (this.IsAuthenticated)
{
Guid claimedAccountId = Guid.Parse(this.FindFirst(ClaimTypes.NameIdentifier).Value);
var accountService = ServiceLocator.SharedInstance.GetInstance<IAccountService>();
_account = accountService.Where(
a => a.Id == claimedAccountId
).FirstOrDefault();
}
_account = _account ?? Membership.Account.GuestAccount;
}
return _account;
}
}
#endregion
}
在 Global.asax 中,我重写了 Application_OnPostAuthenticateRequest 方法以设置自定义身份,并且效果很好 - 但仅在表单中,而不是在 WebAPI 中。
另外,我确实在 WebApiConfig.cs 中设置了
config.SuppressDefaultHostAuthentication();
因此,MyIdentity 被清空并且 User.Identity 重置回 ClaimsIdentity 确实有意义。
所以总结一下我的问题 - 有没有办法定义将使用哪个 Identity 类,所以我可以设置 MyIdentity 而不是 ClaimsIdentity?
【问题讨论】:
标签: c# asp.net-mvc-4 asp.net-web-api owin