Oatuth2协议的客户端模式介绍

  • Client Credentials Grant (客户端模式)是Oauth2.0协议中,四种模式自建单的一种。它由两部分构成,客户端认证服务器。认证服务器确认客户端无误后返回一个token,客户端请求带着token访问资源。(一般使用场景是在一个安全的环境下,例如我的同一个系统中,一个api请求另外一个api)。

  • 这里借用下阮一峰老师画的图(博客地址=》http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)

IdentityServer4客户端模式实现

  • 首先我们创建一个core的api项目作为认证服务器,添加nuget程序包IdentityServer4,将启动端口设置为5000

  • 接下来添加一个类,取名字叫做Config,我们用它来初始化Identityserver(配置要保护的资源和可以访问该API的客户端服务器)。
    代码如下:

/// <summary>/// Idnetity配置,初始化Identityserver/// </summary>public class Config{//定义要保护的资源(webapi)public static IEnumerable<ApiResource> GetApiResources(){return new List<ApiResource>{new ApiResource("api1", "My API")};}//定义可以访问该API的客户端public static IEnumerable<Client> GetClients(){return new List<Client>{new Client(){ClientId = "client",AllowedGrantTypes = GrantTypes.ClientCredentials,  //设置模式,客户端模式ClientSecrets ={new Secret("secret".Sha256())},AllowedScopes = { "api1" }}};}}
  • 接下来配置startup,将资源和客户端的初始信息服务加入到DI容器,同时引用IdentityServer中间件。代码如下所示:

public void ConfigureServices(IServiceCollection services){services.AddIdentityServer().AddDeveloperSigningCredential().AddInMemoryApiResources(Config.GetApiResources())  //配置资源.AddInMemoryClients(Config.GetClients());        //配置客户端services.AddMvc();}public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}//使用identityserver中间件app.UseIdentityServer();app.UseMvc();}
  • 再添加一个webapi项目,作为我们的资源服务器。添加nuget包,IdentityServer4.AccessTokenValidation,将启动端口设置为5001

  • 2、配置startup,添加认证服务器地址,和apiname &&引用中间件,代码如下:

public void ConfigureServices(IServiceCollection services){services.AddAuthentication("Bearer").AddIdentityServerAuthentication(options =>{options.Authority = "http://localhost:5000";    //配置Identityserver的授权地址options.RequireHttpsMetadata = false;           //不需要httpsoptions.ApiName = "api1";                        //api的name,需要和config的名称相同});services.AddMvc();}public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseAuthentication();// 添加认证中间件app.UseMvc();}
  • 将受保护资源controller添加[Authorize]。(因为资源服务器AddIdentityServerAuthentication 方法的参数和返回值都是AuthenticationBuilder(类似于一个中间件),所以可以多次调用AddIdentityServerAuthentication方法来控制这个api 资源可以让谁访问到。)

  • 最开始我们直接访问资源服务器的api,返回401,因为我们的资源被保护了。

  • 这时候来到IdentityServer4的官网,官网给出了这么一个地址=》

  • 我们访问这个地址时候,它会返回我们的Config配置=》

  • 其中有一个token_endpoint的url地址,我们带着Client的配置来访问它=》

  • 此时拿到Token,再带着token去访问我们的资源,争取获取到资源数据=》

https://github.com/conanl5566/dotnet-core-Example/tree/master/WebApplication25

初探IdentityServer4(客户端模式)相关推荐

  1. 一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)

    概述 IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架.将identityserver部署在你的 ...

  2. IdentityServer4密码模式

    Oatuth2协议的密码模式介绍 用户会将用户名,密码给予客户端,但是客户端不保存此信息,客户端带着用户的密码请求认证服务器,认证服务器密码验证通过后后将token返回给客户端. 这里借用下阮一峰老师 ...

  3. 初探Web客户端追踪技术

    初探Web客户端追踪技术 http://zoo.zhengcaiyun.cn/blog/article/webclient 前言 案例1 当我们首次浏览网站时,在网页的下方位置经常会出现提示,询问是否 ...

  4. [ESP8266]--开启服务器模式和客户端模式

    [ESP8266]--开启服务器模式和客户端模式 版权声明:本文为博主原创文章,欢迎转载,转载请注明出处. https://blog.csdn.net/wangyijieonline/article/ ...

  5. 详解ISA2006的三种客户端模式

    今天介绍如何利用ISA2006的代理服务,对防火墙内网用户实现统一的互联网接入.实验拓扑如下图所示: ISA2006代理服务器支持三种客户端模式: web代理 防火墙客户端 SNAT 计算机perth ...

  6. Spring Security Oauth2:授权模式、简单模式 、密码模式 和 客户端模式

    Oauth2的授权模式流程 1.先得到用户的授权grant 2.利用grant得到令牌token 3.根据token获取用户的信息 步骤1:客户端(第三方应用)向用户请求授权. 步骤2:用户单击客户端 ...

  7. UWB定位实验 - 客户端模式(被动式)TDOA定位精度测试

    摘要 本实验主要测试客户端模式(被动式.下行模式)方案的UWB定位系统其定位性能,包括TDOA到达时间差稳定性.定位精度等. 定位性能测试指标 客户端模式TDOA 在使用客户端模式(被动式.下行模式) ...

  8. 迅捷fw150服务器无响应,Fast迅捷FW150RM无线路由器Client客户端模式怎么设置

    Fast迅捷FW150RM无线路由器配置简单,不过对于没有网络基础的用户来说,完成路由器的安装和Client客户端模式的设置,仍然有一定的困难,本文学习啦小编主要介绍Fast迅捷FW150RM无线路由 ...

  9. DD-WRT 客户端模式设置 暨添加无线连接功能

    近来把TP_LINK 841N V7 刷过的DD-WRT升级了一下 ,时间长了忘记了客户端模式怎么设置,而且网上竟很难找到准确信息,研究一番弄懂记下备忘. 一.登录路由器(默认地址192.168.1. ...

最新文章

  1. ROS Melodic 的依赖关系记录
  2. 江西理工大学计算机管理技术期末复习(wangzhendong)网络管理与维护
  3. 提高sql性能的方法
  4. java的for循环
  5. ServiceStack学习之一准备工作
  6. 使用async读取异步数据
  7. mysql数据库的远程访问_mysql数据库远程访问设置方法
  8. 火爆全网MySQL路线笔记!linuxmysql允许远程连接
  9. CISCO路由器的备份与还原(2)
  10. [导入]polygraph3d三维运行时引擎为silverlight 1.0.zip(15.69 KB)
  11. 【机器学习】十二、一文看懂支持向量机原理
  12. 神奇的 SQL 之别样的写法
  13. Python制作一个圣诞抽奖程序,原来如此简单
  14. 集宁一中高122班聚会议程安排
  15. 软件测试:什么样的公司需要专职测试?
  16. Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
  17. vs项目属性中目标平台x86,x64,any cpu的区别
  18. 双向可控硅触发电路的设计方案
  19. 快速搭建koa2手脚架指南
  20. java使用POI导出图片到Excel

热门文章

  1. java 文件上传至oracle blob字段 实现
  2. silverlight中数据绑定讲解
  3. C++中char*与wchar_t*之间的转换
  4. STM32的FLASH ID加密
  5. 部署也是工程的一部分,也要编程(自动化)
  6. js控制图像等比例缩放
  7. 数字图像处理技术在TWaver可视化中的应用
  8. .net 测试工具类
  9. 用wordpress制作网站的总结
  10. Oracle命令--alter 操作