【发布时间】:2018-10-16 08:31:51
【问题描述】:
我正在尝试在使用 Windows 身份验证时向我的 MVC 应用程序添加声明,但声明在请求之间不会持续存在。
关于如何做到这一点的任何建议?我在 global.asax 的 Application_AuthorizeRequest 中添加声明并读取我的控制器中的值。
全球.asax:
protected void Application_AuthorizeRequest()
{
var claimsPrincipal = User as ClaimsPrincipal;
var claimsIdentity = User.Identity as ClaimsIdentity;
if (!claimsPrincipal.Claims.Where(x => x.Type == "IsSpecial").Any()) \\ALWAYS TRUE!
{
var domain = User.Identity.Name.Split('\\')[0];
using (var ctx = new PrincipalContext(ContextType.Domain, domain))
using (var user = UserPrincipal.FindByIdentity(ctx, HttpContext.Current.User.Identity.Name))
{
if (user != null)
{
var groups = user.GetGroups()
.Select(x => x.SamAccountName);
if (groups.Contains("Special User")
{
claimsIdentity.AddClaim(new Claim("IsSpecial", "Yes"));
}
控制器:
var claimsPrincipal = User as ClaimsPrincipal;
var isSpecial = claimsPrincipal.Claims.Where(x => x.Type == "IsSpecial").First().Value;
【问题讨论】:
-
“在请求之间不持久”是指每次请求都会调用您的代码吗?
-
是的,在每个新请求上都没有名为“IsSpecial”的声明
标签: c# asp.net-mvc authentication