首页 > 其他分享 >使用IdentityServer4搭建鉴权服务

使用IdentityServer4搭建鉴权服务

时间:2023-11-04 21:12:27浏览次数:35  
标签:ClientInitConfig 鉴权 public new options IdentityServer4 搭建

  IdentityServer4是ASP.NET Core量身定制的JWT(son Web Token, token一种的格式 )服务框架,实现了OpenID Connect和 OAuth2.0协议(规范 认证授权中间件) 。

一、创建鉴权服务API

1.新建Core WebAPI进程服务:使用aminimal api,

     

    //顶级语句---脚本式编程

    var builder = WebApplication.CreateBuilder(args);

2.nuget IdentityServer4安装类库

   

 3.注册中间件-初始化数据

  首先注入

1 #region IOC
2 builder.Services.AddIdentityServer()//ids4怎么用的
3 .AddDeveloperSigningCredential()//临时生成的证书--即时生成的
4 .AddInMemoryClients(ClientInitConfig.GetClients())//InMemory 内存模式
5 .AddInMemoryApiScopes(ClientInitConfig.GetApiScopes())//指定作用域
6 .AddInMemoryApiResources(ClientInitConfig.GetApiResources());//能访问啥资源
7 #endregion

  调用

#region 中间件
app.UseIdentityServer();//使用这个中间件来处理请求
#endregion
  
ClientInitConfig类
 1 public class ClientInitConfig
 2 {
 3     public static IEnumerable<IdentityResource> IdentityResources =>
 4     new IdentityResource[]
 5     {
 6             new IdentityResources.OpenId(),
 7             new IdentityResources.Profile(),
 8     };
 9 
10     /// <summary>
11     /// 定义ApiResource   
12     /// 这里的资源(Resources)指的就是管理的API
13     /// </summary>
14     /// <returns>多个ApiResource</returns>
15     public static IEnumerable<ApiResource> GetApiResources()
16     {
17         return new[]
18         {
19                 new ApiResource("UserApi", "用户获取API")
20                 {
21                     Scopes={ "scope1" }//4.x必须写的
22                 }
23             };
24     }
25 
26     /// <summary>
27     /// Api范围---4.x新增的
28     /// </summary>
29     public static IEnumerable<ApiScope> GetApiScopes()
30     {
31         return new ApiScope[]
32           {
33                 new ApiScope("scope1"),
34                 new ApiScope("scope2"),
35           };
36     }
37 
38     /// <summary>
39     /// 定义验证条件的Client
40     /// </summary>
41     /// <returns></returns>
42     public static IEnumerable<Client> GetClients()
43     {
44         return new[]
45         {
46                 new Client
47                 {
48                     ClientId = "AspNetCore6.AuthDemo",//客户端唯一标识
49                     ClientName="Single AuthenticationCenter",
50                     ClientSecrets = new [] { new Secret("123456".Sha256()) },//客户端密码,进行了加密
51                     AllowedGrantTypes = GrantTypes.ClientCredentials,
52                     //授权方式,客户端认证,只要ClientId+ClientSecrets
53                     AllowedScopes = new [] { "scope1" },//允许访问的资源
54                     
55                     
56                     Claims=new List<ClientClaim>(){
57                         new ClientClaim(IdentityModel.JwtClaimTypes.Role,"Admin"),
58                         new ClientClaim(IdentityModel.JwtClaimTypes.NickName,"Admin"),
59                         //new ClientClaim(ClaimTypes.Role,"Admin"),
60                         //new ClientClaim(ClaimTypes.Name,"Admin"),
61                     }
62                 }
63             };
64     }
65 }

二、客户端集成Ids4

1.nuget IdentityServer4.AccessTokenValidation

2.增加鉴权+授权+特性

1 builder.Services.AddAuthentication("Bearer")//scheme--表示通过Bearer方式来解析用户信息
2      .AddIdentityServerAuthentication(options =>
3      {
4          options.Authority = "http://localhost:7200";//ids4的地址--专门获取公钥
5          options.ApiName = "UserApi";
6          options.RequireHttpsMetadata = false;
7      });//配置ids4
8 
9 var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

在接口方法前增加特性标记

  [Authorize]  //需要授权

三、网关集成Ids4

1.nuget IdentityServer4.AccessTokenValidation

2.配置鉴权服务

 1 #region Ids4
 2 var authenticationProviderKey = "UserGatewayKey";
 3 builder.Services.AddAuthentication("Bearer")
 4    .AddIdentityServerAuthentication(authenticationProviderKey, options =>
 5    {
 6        options.Authority = "http://localhost:7200";
 7        options.ApiName = "UserApi";
 8        options.RequireHttpsMetadata = false;
 9        options.SupportedTokens = SupportedTokens.Both;
10    });
11 #endregion

3.配置文件匹配

  配置文件中添加配置

    "AuthenticationOptions": {
        "AuthenticationProviderKey": "UserGatewayKey",
        "AllowedScopes": []
      },

 

标签:ClientInitConfig,鉴权,public,new,options,IdentityServer4,搭建
From: https://www.cnblogs.com/jiangyuhu/p/17809793.html

相关文章

  • 前端开发笔记[4]-Gradio搭建演示页面
    摘要使用Gradio在Python环境搭建图像处理和视频处理的演示网页.Gradio简介[https://www.gradio.app]Gradio是一个开源的Python库,用于构建机器学习和数据科学演示应用。它可以帮助AI算法工程师将训练的模型分享给大众,并赋予模型与用户交互的能力。使用Gradio,你可以通过几行代码......
  • 云计算-hadoop的安装(书接上回+分布式搭建)
    书接上回,这次来进行分布式集群的搭建。 执行命令:echo$JAVA_HOME查看路径,我的路径如图所示:  然后在/usr/local/hadoop目录下,执行命令gedit./etc/hadoop/hadoop-env.sh打开文本,然后再第一行添加刚刚的路径,如图所示:  因为之前一节咱们已经配置过hdfs-site.xml和co......
  • GOM引擎搭建时需要注意哪些问题以及需要准备哪些东西
    如何选择合适的gom引擎版本首先,您需要了解自己的需求和预算。市面上的gom引擎版本琳琅满目,价格也各不相同。在选择版本时,建议您根据自己的实际情况进行选择,切勿盲目追求高级版本。同时,建议在购买前先查看该版本的官方网站和用户评价,确保该版本具备所需的功能并符合您的需求。传奇版......
  • #yyds干货盘点#Expo 搭建 React-native 项目
    Expo搭建RN项目Expo 搭建项目有两种方式:一种是通过Expo的脚手架 expo-cli;一种是通过 create-react-native-app。本文采用第一种。1、安装expo-clinpminstallexpo-cli--global2、创建项目expoinitmy-new-project会有两类模板让你选择:托管工作流,裸露工作流(感觉叫原生工......
  • 麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包
    原文链接:麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包hello,大家好啊,今天给大家带来麒麟桌面操作系统软件仓库搭建的文章02-软件仓库添加新的软件包,本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上,为搭建好内网软件仓库源中添加新的类型软件包,本系列共有三个......
  • Windows 11 搭建Stable Diffusion遇到的问题
    趁着双11,将我的i54690+ddr34gx2换掉了,换成了AMD5600+ddr4x2,另外加了个1t的m2的ssd。原先的硬件部分留下了:500w的金河田电源kingstonsdd128g系统启动盘保留wdblue1t也保留下来,但是最近待机之后总是会找不到,暂时没去调查什么原因之前的1650s显卡然后......
  • 【django开发】知识经验总结共50页md文档。今日分享:django项目搭建
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • Windows server 2022 搭建 AD 域服务器<01>
    1.AD(ActiveDirectory)WindowsServer环境准备AD应用程序:ActiveDirectory域控制器主机名称IP角色AD-Server192.168.61.237AD服务器2.配置AD环境地址3.添加角色和功能配置域控制器配置DSRM密码:Lahmy1c!安装后会自动重启服务器,重启后,系统将......
  • 直播软件搭建,当前时间、既定时间后的时间及时间比较大小
    直播软件搭建,当前时间、既定时间后的时间及时间比较大小获取当前时间 //时间格式SimpleDateFormatdf=newSimpleDateFormat(“yyyy-MM-dd”);//现在的时间Datenow=newDate();//计算某一月份的最大天数Calendarcal=Calendar.getInstance();//Date转化为Calendarc......
  • 不会搭建企业网,建议你不要点开这篇文章
    中午好,我是老杨。企业网络搭建一直是网工技术里的基础且重要的部分,一些小白粉丝和我反馈,技术是了解一些,但是整体逻辑搭建不起来。企业网是很多网工都会面临的一个工作日常环境。但是,尽管很多人每日接触,也不代表就能懂得企业网的整体架构,如何配置以及如何搭建。企业网会涉及的技术点......