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

2021/7/4 17:22:39

本文主要是介绍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<CookiePolicyOptions>(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
  • [ASP.NET Core 3.1 对接 IdentityServer 回调报错:Correlation failed](https://www.cnblogs.com/stulzq/p/13954245.html)

​ 看晓晨大神的方案,难道仅仅是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<ApiScope> Apis =>
     new List<ApiScope>
     {
         new ApiScope("api1", "My API")
     };

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

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



这篇关于AspnetCore3.1配合IdentityServer4(4.0)的填坑之路的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程