首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未返回SecurityToken的OWIN

未返回SecurityToken的OWIN
EN

Stack Overflow用户
提问于 2015-11-26 12:00:19
回答 1查看 565关注 0票数 0

我试图为另一个adfs生成ActAs令牌,但我第一次登录ADFS并不返回SecurityToken。我是不是在启动时遗漏了一些配置?

Startup.cs

代码语言:javascript
复制
    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;
    }

如何检索令牌:

代码语言:javascript
复制
  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

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

代码语言:javascript
复制
  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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 14:29:46

必须以这样的方式回收:

代码语言:javascript
复制
 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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33938172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档