【发布时间】:2018-08-10 18:56:27
【问题描述】:
我在谷歌上搜索这个东西很久了,但仍然无法得到正确的答案。我正在使用身份声明进行用户身份验证,并且我的 _Layout.cshtml 页面中需要一些声明值。但是,我可以检索自定义身份声明值,但不能检索内置值。
在这里我设置了我的身份:
var ident = new ClaimsIdentity(
new[] {
// adding following 2 claim just for supporting default antiforgery provider
new Claim(ClaimTypes.NameIdentifier, user.LoginId),
new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),
new Claim(ClaimTypes.Name,user.UserName),
new Claim(ClaimTypes.Sid,user.UserId.ToString()),
new Claim("OperationType", user.OperationType.ToString()),
new Claim("ImageLink", user.ImageLink.ToString())
},
DefaultAuthenticationTypes.ApplicationCookie);
var claimsPrincipal = new ClaimsPrincipal(ident);
// Set current principal
Thread.CurrentPrincipal = claimsPrincipal;
和我的布局页面代码:
@using System.Security.Claims;
...........
@{
string userDesignation = ((ClaimsIdentity)User.Identity).FindFirst("OperationType").Value; ;
string userImage = ((ClaimsIdentity)User.Identity).FindFirst("ImageLink").Value; ;
}
我可以检索我的自定义声明 (ImageLink,OperationType) 值,但无法使用相同的模式检索 (Name,Sid)。我发现一些关于扩展方法的答案。这是检索值的唯一方法还是有其他方法? 提前致谢
【问题讨论】:
-
这种类型的逻辑不应该出现在视图(或布局)中。相反,您应该创建一个
LayoutController,并使用您从布局中调用html.RenderPartial()的方法。 -
不能使用OWIN认证中间件吗? Example
标签: c# asp.net-mvc razor asp.net-identity claims-based-identity