我正在尝试将您的Nuget包用于dotnet核心,并且我获得了一点点成功,我也可以登录到SAML身份提供者,如Onelogin、Okta和我也获得了日志用户信息,但我在生成访问令牌时感到困惑(Bearer令牌调用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);
}发布于 2019-07-19 16:10:24
通过在Saml2Configuration.SaveBootstrapContext = true中设置appsettings.json,您可以以XML字符串的形式访问SAML2.0令牌:
...
"Saml2": {
"SaveBootstrapContext": true,
"IdPMetadata": "https://localhost:44305/metadata",
"Issuer": "itfoxtec-testwebappcore",
...
}或者,您可以在代码中设置配置:
config.SaveBootstrapContext = true;然后,您可以将SAML2.0令牌读入saml2AuthnResponse.ClaimsIdentity.BootstrapContext中的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);
}https://stackoverflow.com/questions/57106440
复制相似问题