Skoruba.IdentityServer4.STS.Identity 踩坑

记录:

Skoruba.IdentityServer4.STS.Identity项目中注册的认证处理程序,接入第三方认证  

  Skoruba.IdentityServer4.STS.Identity 踩坑

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   如下图:这里没有指定默认的Authentication Scheme 

 Skoruba.IdentityServer4.STS.Identity 踩坑

  但是在AddIdentityServer中 services.AddIdentityServer 添加Identityserver4 时

 

 

 

   Skoruba.IdentityServer4.STS.Identity 踩坑

  Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   在Identityserver4 扩展方法,identityserver4 重新指定默认 Authentication Scheme,还添加了cookie Scheme,一个默认Scheme ,一个可用于第三方认证使用。

  接入第三微软Azure AD 认证时,存在的问题

   如下图:

  Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   当使用 AddMicrosoftIdentityWebApp 方法时,在AccountController 中 ExternalLoginCallback会报错,下图代码展示区

  原因在于  调用_signInManager.GetExternalLoginInfoAsync();

  Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

 

 

 

  方法  signInManager.GetExternalLoginInfoAsync 方法内部,调用了 Context.AuthenticateAsync(IdentityConstants.ExternalScheme); 在运行的时候

  IdentityConstants.ExternalScheme ="Identity.External" 

  signInManager.GetExternalLoginInfoAsync()执行一直返回null,使用了错误的  Authentication Scheme,

 Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

 

  解决方案一

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

 

  如果改用 await  HttpContext.AuthenticateAsync(OpenIdConnectDefaults.AuthenticationScheme); 将得到正确的处理。那么可以重写 _signInManager.GetExternalLoginInfoAsync() 方法实现。

  解决方法二

  Skoruba.IdentityServer4.STS.Identity 踩坑

   使用 AddAzureAD 扩展包,需要使用nuget 下载 Microsoft.AspNetCore.Authentication.AzureAD.UI 包。

  存在的其他需要注意的问题

  不管使用 AddMicrosoftIdentityWebApp 还是 AddAzureAD ,如果还存在 GitHub 、Google 第三方认证的话

  例如:使用GitHub ,下图查看它的扩展方法

  Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   Skoruba.IdentityServer4.STS.Identity 踩坑

 

 

   github,会使用自己的Authentication Scheme 和 认证处理中间件,一般无需设置 options.CallbackPath = externalProviderConfiguration.GitHubCallbackPath;

   在github设置中 ,如下设置:

  Skoruba.IdentityServer4.STS.Identity 踩坑

 

   

 

上一篇:ENSP ftp-telent-ssh


下一篇:3.0AuthenticationBuilder【->IServiceCollection 】