AspnetCore3.1配合IdentityServer4(4.0)的填坑之路


AspnetCore3.1配合IdentityServer4(4.0)的填坑之路

? 最近在学习IdentityServer4,顺便build一下Aspnetcore和IdentityServer4的源码,研究下Id4的遇到的各种问题,以下走过的坑我是基于IdentityServer4的4.0.0分支下测试Sample文件夹下的Quickstarts的3_AspNetCoreAndApis进行改造的代码,为了匹配IdentityServer4-4.0.0版本,我使用了

IdentityServer4.Quickstart.UI的最新UI代码。

? 接下来,开始一点点填坑之路。

坑一:登录后仍旧返回登录界面

请看坑图:

无法登录

调试过程中,发现登录过程正常,流程正常,再跳转回来就仍旧是登录界面。毫无头绪,为快速解决,施展百度大法,查得终极原因如下:

百度大法

于是紧跟步伐,在IdentityServer4的StartUp中补充以下代码:

services.Configure(options =>
{
    //https://docs.microsoft.com/zh-cn/aspnet/core/security/samesite?view=aspnetcore-3.1&viewFallbackFrom=aspnetcore-3
    options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax;
});

并再Configure中使用app.UseCookiePolicy();

于是登录的坑变成了接下来的第二个坑。

坑二:Correlation failed

请看坑图:

? 跳转的登录界面没有显示,却显示了开发者调试界面。

Correlation failed

? 调试IdentityServer4的代码发现,问题出现在这里:

? Cookie肯定是哪一步骤被覆盖了,这个问题不打算深究(一来是觉得实力太弱,再就是觉得这上面花费时间比较久),于是再次使用百度大法,寻找答案。

  • .Net Core外部登录中的一个坑:Correlation failed
  • []()

? 看晓晨大神的方案,难道仅仅是https的问题,动手操练起来,先把IdentityServer4的https配置起来。

? 于是,再次Correlation failed!那就再把MvcClient的代码https配置起来。至此大坑已经填完,已经能够正常跳转并登录了。现在其实删除第一个坑中配置的CookiePolicy已经无伤大雅。

? 说完了,这两个坑,接下来谈谈遇到的其它两个小坑。

坑三:“The remote certificate is invalid according to the validation procedure”

? IdentityServer4服务端的https配置好了之后,如果客户端跳转服务端登录界面时,遇到这个问题,则需要重置下证书。

? 首先,打开控制面板->搜索管理用户证书->找到个人->证书,删除原有证书即可,如下图所示:

? 如果删除完成后,直接运行IdentityServer4服务端,则会继续报错Unhandled Exception: System.InvalidOperationException: Unable to configure HTTPS endpoint. ,此时请念好这两句口诀:

  • dotnet dev-certs https --clean
  • dotnet dev-certs https -t

? 即可重新生成https证书,光荣解决问题。

坑四:Invalid scope

请看坑图:

? 这是由于IdentityServer4升级了InMemory部分的AddInMemoryApiResources,将其更改为了AddInMemoryApiScopes,因此需要对Config类作以下调整:

 public static IEnumerable Apis =>
     new List
     {
         new ApiScope("api1", "My API")
     };

? 同时,在Startup中将.AddInMemoryApiResources(Config.Apis)替换为.AddInMemoryApiScopes(Config.Apis).

? 以上便是AspnetCore3.1配合IdentityServer4(4.0)的初级学习阶段的填坑之旅了,那IdentityServer4之路再出发!