【问题标题】:OWIN ADFS not returning SecurityTokenOWIN ADFS 未返回 SecurityToken
【发布时间】:2015-11-26 12:00:19
【问题描述】:

我正在尝试为另一个 adfs 生成 ActAs 令牌,但我登录的第一个 ADFS 没有返回 SecurityToken。 我在 OWIN 启动时缺少一些配置吗?

Startup.cs

    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions { });

        app.UseWsFederationAuthentication(
            new WsFederationAuthenticationOptions
            {
                Wtrealm = ConfigurationManager.AppSettings["ida:Audience"],
                AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
                TokenValidationParameters = new TokenValidationParameters
                {                        
                    SaveSigninToken = true,
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],

                },

                Configuration = getWsFederationConfiguration()
            }
        );
    }

    private static WsFederationConfiguration getWsFederationConfiguration()
    {
        WsFederationConfiguration configuration = new WsFederationConfiguration
        {
            Issuer = ConfigurationManager.AppSettings["wsFederation:trustedIssuer"],
            TokenEndpoint = ConfigurationManager.AppSettings["wsFederation:issuer"],
        };

        configuration.SigningKeys.Add(new X509SecurityKey(new X509Certificate2(Convert.FromBase64String(ConfigurationManager.AppSettings["wsFederation:trustedIssuerSigningKey"]))));

        return configuration;
    }

我如何检索令牌:

  public SecurityToken GetSecuritySAMLToken()
    {
        ClaimsPrincipal icp = Thread.CurrentPrincipal as ClaimsPrincipal;
        ClaimsIdentity claimsIdentity = (ClaimsIdentity)icp.Identity;
        BootstrapContext bootstrapContext = claimsIdentity.BootstrapContext as BootstrapContext;

        //bootstrapContext is not null and bootstrapContext.Token is not null, however bootstrapContext.SecurityToken is null
        return bootstrapContext.SecurityToken;
    }

更新 1

尝试将 string(SAMLToken) 转换为 SecurityToken,handler.ReadToken 返回 null。

  public SecurityToken GetSecuritySAMLToken()
    {
        ClaimsPrincipal icp = Thread.CurrentPrincipal as ClaimsPrincipal;
        ClaimsIdentity claimsIdentity = (ClaimsIdentity)icp.Identity;
        BootstrapContext bootstrapContext = claimsIdentity.BootstrapContext as BootstrapContext;

        return GetSecurityTokenFromStringToken(bootstrapContext);
    }

    private static SecurityToken GetSecurityTokenFromStringToken(BootstrapContext bootstrapContext)
    {
        var handler = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection();
        SecurityToken ST = handler.ReadToken(bootstrapContext.Token);
        return ST;
    }

【问题讨论】:

    标签: asp.net-web-api2 token owin saml adfs2.0


    【解决方案1】:

    必须以这种方式检索它:

     private static SecurityToken GetSecurityTokenFromStringToken(BootstrapContext bootstrapContext)
        {
            Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler handler = new Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler();
            handler.Configuration = new Microsoft.IdentityModel.Tokens.SecurityTokenHandlerConfiguration();
            XmlReader reader = XmlReader.Create(new StringReader(bootstrapContext.Token));
            SecurityToken samlToken = handler.ReadToken(reader);
    
            return samlToken;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 2017-08-25
      • 2015-05-15
      相关资源
      最近更新 更多