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
请看坑图:
? 跳转的登录界面没有显示,却显示了开发者调试界面。
? 调试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之路再出发!