GetExternalLoginInfoAsync返回Null。 user.Id是正确的并且存在于数据库中。
ExternalLoginInfo info = await signInManager.GetExternalLoginInfoAsync(user.Id);
if (info == null)
{
throw new ApplicationException($"Unexpected error occurred loading external login info for user with ID '{user.Id}'.");
}
从我可以看到,外部SAML提供商应该返回一系列属性:
public async Task<IActionResult> LinkLogin(string provider)
我怀疑该问题可能与CORS错误有关但是我没有成功解决此错误,即使我已根据http://docs.identityserver.io/en/release/topics/cors.html处的文档在startup.cs中添加了以下行。< / p>
var cors = new DefaultCorsPolicyService(_loggerFactory.CreateLogger<DefaultCorsPolicyService>())
{
AllowedOrigins = { "https://sso.acme.com" }
};
services.AddSingleton<ICorsPolicyService>(cors);
以下是调试信息的日志:
更新: - 客户发回Saml请求说这不是对/ Saml2 / ACS的CORS请求,因此我们不理解为什么我们会从Identity Server / Sustainsy获得错误
答案 0 :(得分:1)
这个问题的解决方案最终很简单。
ExternalLoginCallback
内),使用这种方法来处理来自谷歌的微软Facebook的回复 ExternalLoginInfo info = await _signInManager.GetExternalLoginInfoAsync(user.Id);
AuthenticateResult samlResult = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);
然后,您可以使用ExternalLoginInfo
samlResult
对象
以下示例中提供了所有代码: