初探IdentityServer4(客户端模式)

Oatuth2协议的客户端模式介绍

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

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

      558c96e127e512d70292c7dd1c1dcc89.png

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,因为我们的资源被保护了。

    • 154caa969b123a1d0af6569579720624.png

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2596 售货员的难题

2596 售货员的难题 时间限制: 1 s空间限制: 32000 KB题目等级 : 钻石 Diamond题解题目描述 Description某乡有n个村庄(1<n<&#xff1d;15)&#xff0c;有一个售货员&#xff0c;他要到各个村庄去售货&#xff0c;各村庄之间的路程s(0<s<1000)是已知的&#xff0c;…

研究表明:胸部大小其实早已.....

1 这样就能不战而胜了&#xff08;素材源于网络&#xff0c;侵删&#xff09;▼2 说好的情比金坚呢&#xff1f;▼3 整挺好&#xff0c;锅都不用洗了&#xff08;via.豆瓣撕破伤口、&#xff09;▼4 就是这么自信▼5 什么丝袜这么厉害▼6 好家伙&#xff0c;请问还需要女婿…

Java学习笔记之 IO包 字节流

IO包最重要的五个类和一个接口 File/OutputStream/InputStream(字节流)/Writer/Reader(字符流) 一个接口&#xff1a;Serializable File类&#xff1a; 字节流&#xff1a; OutputStream与InputStream是抽象类 OutputStream是整个IO包中&#xff0c;字节输出流的最大类 Fi…

周期串问题(二)

题目&#xff1a; 题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到&#xff0c;我们说该串以k为周期。例如&#xff0c;abcabcabcabc以3为周期&#xff08;注意&#xff0c;它也可以6和12为周期,结果取最小周期3&#xff09; 代码如下&#xff1a; …

bootstrap bootstraptable 固定列_1个Excel公式按条件自定义格式显示固定电话号码

点击右上角“关注”&#xff0c;每天免费获取干货教程前面写了很多篇关于数据查询、数据统计、数据分析、公式排错的教程&#xff0c;今天换一个口味&#xff0c;写个关于自定义格式显示数据的教程。因为工作中很多时候都需要按照指定的要求将数据源整理成固定的格式&#xff0…

记一次引入Elasticsearch的系统架构实战

前言我曾经面试安踏的技术岗&#xff0c;当时面试官问了我一个问题&#xff1a;如果你想使用某个新技术但是领导不愿意&#xff0c;你怎么办&#xff1f;对于该问题我相信大家就算没有面试被问到过&#xff0c;现实工作中同事之间的合作也会遇到。 因此从我的角度重新去回答这…

rsync 安装使用详解

RSYNC软件介绍&#xff1a; rsync是类unix系统下的数据镜像备份工具&#xff0c;从软件的命名上就可以看出来了——remote sync。它的特性如下&#xff1a;可以镜像保存整个目录树和文件系统。可以很容易做到保持原来文件的权限、时间、软硬链接等等。无须特殊权限即可安装。优…

【 Tomcat 】tomcat8.0 调优配置

2019独角兽企业重金招聘Python工程师标准>>> 1、优化内核及TCP连接&#xff1a; fs.file-max 655350  # 系统文件描述符总量 net.ipv4.ip_local_port_range 1024 65535  # 打开端口范围 net.ipv4.tcp_max_tw_buckets 2000  # 设置tcp连接时TIME_WAIT个数 n…

[转]ORACLE 异常错误处理

本文转自&#xff1a;http://www.cnblogs.com/soundcode/archive/2012/01/10/2318385.html 本篇主要内容如下&#xff1a; 5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4 用户定义的异常处理 5.2 异常错误传播 5.2.1 在…

java.io.StreamCorruptedException: invalid type code: AC解决办法

.java.io.StreamCorruptedException: invalid type code: AC解决办法问题描述&#xff1a; 在向一个文件写入可序列化对象时&#xff0c;每次只想向文件的末尾添加一个可序列化的对象&#xff0c;于是使用了FileOutputStream&#xff08;文件名&#xff0c;true&#xff09;间接…

abb机器人指令手册_第1519课 ABB机器人初级教程

每一位读者都是我分享的动力&#xff0c;感谢大家关注&#xff01;第15课 系统输入输出与IO信号的关联第16课 示教器可编程按钮的使用第17课 什么是程序数据第18课 程序数据的类型与分类第19课 创建程序数据第15课第16课第17课第18课第19课每一位读者都是我分享的动力&#xff…

Java学习笔记之 IO包 字符流

字符流&#xff1a;Writer/Reader(字符流) 通过子类FileWriter和FileReader实现父类实例化 package iotest; import java.io.File; import java.io.Writer; import java.io.Reader; import java.io.FileWriter; import java.io.FileReader; public class OutputStreamDemo2 { p…

ci框架(二)

自定义SQL语句 当提供的API满足不了我们对SQL语句的要求的时候&#xff0c;我们通常是自己来写SQL语句&#xff0c;CI也提供了比较强大了&#xff0c;能够满足我们需求的一般的sql的API。 $res$…

到底该不该使用存储过程

百度百科对存储过程的定义存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;它存储在数据库中&#xff0c;一次编译后永久有效&#xff0c;用户通过指定存储过程的名字并给出参数&#xff08;如…

leetcode 104. Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 求二叉树的最大深度 /*** Definition for a binary tree node.* public class TreeNode {* int val…

ubuntu上面svn用merge合并到之前的版本

第一步&#xff1a;切换到svn项目的目录 第二步&#xff1a;更新到最新用 svn update 第三步&#xff1a;查看我们当前svn的版本号 svn infoRevision:2234 第四步&#xff1a;查看我们每次记录的日志信息得到版本号 svn log Revision:2231 第五步&#xff1a;合并到之前的版本…

智能卡门禁管理系统_汉中停车场智能门禁系统简介,保安服务收费,行业知识

首页 > 新闻列表 > 正文作者&#xff1a;佚名 点击数&#xff1a; 5更新时间&#xff1a;2020-11-04 08:21:21 导读&#xff1a;名将安防为您提供汉中停车场智能门禁系统简介,保安服务收费的相关知识与详情&#xff1a; 接警时&#xff0c;系统自动调出预警方案&#xf…

Quartus DSE 初步应用

介绍 Design Space Explorer (DSE) is a program that automates the process of finding the optimal collection of Quartus II software settings for a design.心得 &#xff1a; 好的timing是设计出来的。不建议工程一出现timing 就DSE搜索。只有timing只差一点点了才用 &…

推荐系统中协同过滤算法实现分析

原创博客&#xff0c;欢迎转载&#xff0c;转载请注明&#xff1a;http://my.oschina.net/BreathL/blog/62519 最近研究Mahout比较多&#xff0c;特别是里面协同过滤算法&#xff1b;于是把协同过滤算法的这个实现思路与数据流程&#xff0c;总结了一下&#xff0c;以便以后对系…