【发布时间】:2013-12-13 13:26:38
【问题描述】:
我有一个运行 ADFS2 身份验证的 .Net 4.5 MVC4 Web 应用程序。当我访问网站时,我被重定向并通过联合服务器登录,这部分效果很好。
现在在我的应用程序中,我想获取有关用户的信息。 发现很多页面描述了我在谷歌搜索时应该如何做这件事,但我一定错过了一些东西,因为无论我怎么做,我都会得到空白/空值。
我创建了一个测试控制器,它只打印出我在 google 上找到的两个 Claims 对象中的信息。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
namespace Web.Controllers
{
public class ClaimsController : Controller
{
public String Index()
{
System.Security.Claims.ClaimsPrincipal cp =
System.Security.Claims.ClaimsPrincipal.Current;
Microsoft.IdentityModel.Claims.IClaimsIdentity ci =
Thread.CurrentPrincipal.Identity as Microsoft.IdentityModel.Claims.IClaimsIdentity;
var o = new
{
cp_IsAuthenticated = cp.Identity.IsAuthenticated,
cp_AuthenticationType = cp.Identity.AuthenticationType,
cp_Name = cp.Identity.Name,
//cp_Claims = (new JavaScriptSerializer()).Serialize(cp.Claims), // circlular reference
ci_IsAuthenticated = ci.IsAuthenticated,
ci_Label = ci.Label,
ci_Name = ci.Name
//ci_Claims = (new JavaScriptSerializer()).Serialize(cp.Claims) // circular reference
};
return (new JavaScriptSerializer()).Serialize(o);
}
}
}
这样的结果是:
{
"cp_IsAuthenticated":true,
"cp_AuthenticationType":"Federation",
"cp_Name":null,
"ci_IsAuthenticated":true,
"ci_Label":null,
"ci_Name":null
}
我的印象是"Name" = "" 应该包含我在 AD 中设置的名称。
关于我做错了什么或可以尝试的任何想法? 谢谢!
【问题讨论】: