3

アプリケーションにログインするためにWIFを使用しています。すべてが問題ないようです(ログ記録、サイトへのリダイレクトなど)がUser.Identity.Name、タラで使用しようとすると例外がスローされます-nullUserです。私が間違っていることについて何か考えはありますか?私はVS2012で作業しています。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>
4

3 に答える 3

2

WIFを使用する場合は、User.Identity.Nameの代わりにThread.CurrentPrincipal.Identity.Nameを使用する必要があります。

詳細については、http ://msdn.microsoft.com/en-us/magazine/ff872350.aspxを参照してください。WindowsIdentityFoundationの詳細をご覧ください。

于 2013-02-28T15:20:02.767 に答える
2

STSにユーザーの名前クレームが含まれていることを確認してください。含まれていない場合、User.Identity.Nameはnullになります。

于 2013-03-08T23:09:10.947 に答える
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()

于 2014-05-01T18:11:01.870 に答える