我使用cors和asp.net会员来管理API的安全性。但是在某些情况下,服务器可能需要代表客户端与我们的api通话。如在UI mvc项目代码背后> API。
因为服务器,而不是授权客户端会进行此调用,所以asp.net cookie不会被唤醒或拾取。
我重载了AuthorizeCore以检查是否有令牌:
if(httpContext.Request.Headers["x-access-token"] != null)
{
// this authorization is from token, rather than cookie
var accessToken = httpContext.Request.Headers["x-access-token"];
var security = new Security();
var decrypted = JsonConvert.DeserializeObject<TokenModel>(security.Decrypt(accessToken));
var clientip = GetClientIp(httpContext.Request);
if(httpContext.Request.Headers["x-client-ip"] == null)
{
return false;
}
if (httpContext.Request.Headers["x-client-ip"] != decrypted.Ip)
{
return false;
}
if (!IsSecretValid(decrypted))
{
return false;
}
MembershipUser u = Membership.GetUser(decrypted.UserId);
}
我要问的是,如何将成员资格转换为原则,以便让角色的其余代码等工作。
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase))
{
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
{
return false;
}
这是否可能,如果是这样的话。
答案 0 :(得分:0)
httpContext.User = new GenericPrincipal(new GenericIdentity(u.UserName), System.Web.Security.Roles.GetRolesForUser(u.UserName));
然后,如果需要,这应该使我的控制器操作能够获取用户ID等。