首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“itfoxtec-identity-saml2‘2”的SAML2.0访问令牌

使用“itfoxtec-identity-saml2‘2”的SAML2.0访问令牌
EN

Stack Overflow用户
提问于 2019-07-19 06:07:31
回答 1查看 871关注 0票数 1

我正在尝试将您的Nuget包用于dotnet核心,并且我获得了一点点成功,我也可以登录到SAML身份提供者,如Onelogin、Okta和我也获得了日志用户信息,但我在生成访问令牌时感到困惑(Bearer令牌调用SAML身份提供者的API)。我怎么才能得到那个记号?

我可以在saml2AuthnResponse中看到securitytoken对象,但不知道如何实现该令牌,在该对象中,安全键和singin键为空。

我对此完全陌生,所以我可能误解了一些东西。

请帮帮我。

代码语言:javascript
复制
[Route("AssertionConsumerService")]
    public async Task<IActionResult> AssertionConsumerService()
    {       
        var binding = new Saml2PostBinding();
        var saml2AuthnResponse = new Saml2AuthnResponse(config); 

        binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse);
        if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
        {
            throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
        }
        binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);
        await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: (claimsPrincipal) => ClaimsTransform.Transform(claimsPrincipal)); 
        var relayStateQuery = binding.GetRelayStateQuery();
        var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
        return Redirect(returnUrl);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-19 16:10:24

通过在Saml2Configuration.SaveBootstrapContext = true中设置appsettings.json,您可以以XML字符串的形式访问SAML2.0令牌:

代码语言:javascript
复制
...
"Saml2": {
  "SaveBootstrapContext": true,
  "IdPMetadata": "https://localhost:44305/metadata",
  "Issuer": "itfoxtec-testwebappcore",
  ...
}

或者,您可以在代码中设置配置:

代码语言:javascript
复制
config.SaveBootstrapContext = true;

然后,您可以将SAML2.0令牌读入saml2AuthnResponse.ClaimsIdentity.BootstrapContext中的XML

代码语言:javascript
复制
public async Task<IActionResult> AssertionConsumerService()
{       
    var binding = new Saml2PostBinding();
    var saml2AuthnResponse = new Saml2AuthnResponse(config);

    binding.ReadSamlResponse(Request.ToGenericHttpRequest(), saml2AuthnResponse);
    if (saml2AuthnResponse.Status != Saml2StatusCodes.Success)
    {
        throw new AuthenticationException($"SAML Response status: {saml2AuthnResponse.Status}");
    }
    binding.Unbind(Request.ToGenericHttpRequest(), saml2AuthnResponse);
    await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: (claimsPrincipal) => ClaimsTransform.Transform(claimsPrincipal));

    var samlTokenXml = saml2AuthnResponse.ClaimsIdentity.BootstrapContext as string;

    var relayStateQuery = binding.GetRelayStateQuery();
    var returnUrl = relayStateQuery.ContainsKey(relayStateReturnUrl) ? relayStateQuery[relayStateReturnUrl] : Url.Content("~/");
    return Redirect(returnUrl);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57106440

复制
相关文章

相似问题

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