我正在使用WIF登录我的应用程序。一切似乎都没问题(记录,重定向到网站等),但当我尝试使用User.Identity.Name
在我的鳕鱼异常被抛出时 - User
是空的。任何想法我做错了什么?我在VS 2012上工作。在web.config中生成的部分如下所示:
<system.identityModel>
<identityConfiguration>
<audienceUris>
<add value="http://xxx/" />
</audienceUris>
<issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<trustedIssuers>
<add thumbprint="yyyy" name="https://zzz" />
</trustedIssuers>
</issuerNameRegistry>
</identityConfiguration>
</system.identityModel>
和
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" />
<wsFederation passiveRedirectEnabled="true" issuer="https://zzz/Secure/FederatedLogin.ashx" realm="http://xxx" requireHttps="false" />
</federationConfiguration>
</system.identityModel.services>
答案 0 :(得分:2)
使用WIF时,您应该使用Thread.CurrentPrincipal.Identity.Name而不是User.Identity.Name。
在此处阅读更多内容:http://msdn.microsoft.com/en-us/magazine/ff872350.aspx以了解有关Windows Identity Foundation的更多信息
答案 1 :(得分:2)
检查STS是否包含用户的名称声明,否则User.Identity.Name将为null。
答案 2 :(得分:0)
相反,我使用了:
namespace System.Security.Claims
{
public static class System_Security_Claims_Extensions
{
public static string getName(this ClaimsIdentity ci)
{
foreach (Claim c in ci.Claims)
{
if (c.Type == ClaimTypes.Name)
{
return c.Value;
}
}
return string.Empty;
}
}
}
并在此背景下使用
((ClaimsIdentity)Thread.CurrentPrincipal.Identity).getName()