【问题标题】:SAML2.0 Access token using 'itfoxtec-identity-saml2'SAML2.0 使用“itfoxtec-identity-saml2”的访问令牌
【发布时间】:2019-07-19 06:07:31
【问题描述】:

我正在尝试将您的 Nuget 包用于 dotnet 核心,我也取得了一点成功,我也可以登录到 Onelogin、Okta 等 SAML 身份提供程序,并且我也获得了登录用户信息但是在生成访问令牌时我很困惑(承载令牌调用 SAML 身份提供者的 API)。我将如何获得该令牌?
我可以在 saml2AuthnResponse 中看到 securitytoken 对象,但不知道如何使用该令牌,并且在该对象中安全密钥和 singin 密钥为空。

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

请帮帮我。

[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);
    }

【问题讨论】:

    标签: saml-2.0 itfoxtec-identity-saml2


    【解决方案1】:

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

    ...
    "Saml2": {
      "SaveBootstrapContext": true,
      "IdPMetadata": "https://localhost:44305/metadata",
      "Issuer": "itfoxtec-testwebappcore",
      ...
    }
    

    您也可以在代码中设置配置:

    config.SaveBootstrapContext = true;
    

    然后您可以在saml2AuthnResponse.ClaimsIdentity.BootstrapContext 中将 SAML 2.0 令牌作为 XML 字符串读取:

    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);
    }
    

    【讨论】:

    • 嗨,我们已经在其他方法中得到了这个,但我想知道我们将如何使用该 samlTokenXml 访问不同提供商的 API,或者我们是否需要不记名令牌?
    • 您可能只能将 samlTokenXml 中的 SAML 2.0 不记名令牌用于应用程序自己的 API。您可能需要交换使用 WS-Trust Act As 获得的 SAML 2.0 不记名令牌。 .NET 支持这一点,但它不是 ITfoxtec Identity SAML 组件的一部分。或者,您可以从您的 API 作为受信任的子系统调用提供程序 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多