欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】

程序员文章站 2022-03-31 11:15:29
园子中关于IDSV的文章有很多,但是作为一个小白的我,始终不能跟随众大佬的步伐,遂写下这篇IDS的这篇最佳实践。 阅读本文前,你需要了解以下知识: 1) 了解什么是OAuth2? 参考文献: https://oauth.net/2/ http://www.ruanyifeng.com/blog/20 ......

园子中关于IDSV的文章有很多,但是作为一个小白的我,始终不能跟随众大佬的步伐,遂写下这篇IDS的这篇最佳实践。


 

阅读本文前,你需要了解以下知识:

  1)  了解什么是OAuth2?

    参考文献:

    

      


  2)  什么是OIDC?

    

  

  3)什么是IDS4?

    

    

    以及晓晨master的中文参考文档  

    雨夜朦胧的源码分析文档     http://www.cnblogs.com/RainingNight/p/introduce-basic-authentication-in-asp-net-core.html

    BlackHeart的OIDC实战SSO       

    


 

本文依赖的环境如下:

  1)netcore2.1环境下的IDSV服务器

  2)netcore2.1/netfx环境下对应的客户端接入服务器

  3)netcore2.1/netfx环境下对应的验证服务器为1)

 

一)服务器接入MYSQL脚本设置以及对应表字段含义注解【非官方】

   新建一个空白的.netcore应用网站,Nuget拉取以下dll包,IdentityServer4;IdentityServer4.EntityFramework;Microsoft.AspNetCore.All;

参考官方示例 ,将其中的Quickstart5_HybridAndApi对应服务端代码拷贝到自己的server中,解决方案截图如下

IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】

 

接下来,我们要做的第一步就是关于示例中api资源,标识资源以及token相关信息存储的数据库建表入库。

我这是使用EF的导入功能完成的。主要步骤包含以下:

  1)首先添加如下这句话到对应的项目工程文件中

  <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>
  你的工程文件最终应该看起来如下:
    IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】
  2)切换到该工程目录,使用命令行shell运行当前dotnet指令如下:
    
    dotnet add package Microsoft.EntityFrameworkCore.Design【添加数据迁移包】
    dotnet restore 【这句要是报错 看是不是已经含有efcore的核心组件 有可能版本冲突 不影响】
    dotnet ef 【测试下当下目录环境是否可以连接EF】
    其中dotnet ef  应该显示EF连接成功的拼接图,就是下面这个驴一样的萌物。
    IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】
  
  3)原先使用内存处理的这些包括但不限于用户信息【TestUser】,资源信息【ApiResource,IdentityResource】数据,改为使用数据库操作读写。
    1.注入DI链接
    2.修改关于IClientStore, IResourceStore, and ICorsPolicyService,IPersistedGrantStore的实现为EF  implementation。
    主要实现代码如下:
    IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】
 
  注意:到这一步操作为止,编译一哈,如果报错,请安装     
     Install-Package IdentityServer4.AspNetIdentity
     Install-Package  IdentityServer4.EntityFramework 

  

  4)在服务器所在文件夹目录执行以下命令后

    dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb
    dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb

    此时将在解决方案中生成两个文件夹。

 

  5)执行code  first常规操作,将dll中数据库迁移到localdb,本文是使用mssql,其余的也是类似。
     1.建立一个服务service文件,负责迁移数据。
     2.在全局服务中注册执行即可。
  
  代码截图如下:
  IdentityServer4关于多客户端和API的最佳实践【含多类型客户端和API资源,以及客户端分组实践】【上】

 

 
到此为止  完成了第一步  即将本地数据同步到数据库中,接下来才是重头戏。