OAuth2.0资料

今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准(如果是按照参考文章复制粘贴,应该不会出现踩坑,但是我喜欢自己手动敲一遍),发现几个坑,因而总结下经验,让其他小白同学少走弯路

参考第一篇:https://www.cnblogs.com/cby-love/p/9281955.html

参考第二篇:https://www.cnblogs.com/wyt007/p/8284482.html

博客园晓晨的关于identityServer4的中文文档地址: http://www.cnblogs.com/stulzq/p/8119928.html

Docker中文文档 https://yeasy.gitbooks.io/docker_practice/content/

OAuth2.0(Open Authorization)是一个开放授权协议;第三方应用不需要接触到用户的账户信息(如用户名密码),通过用户的授权访问用户资源

OAuth的步骤一般如下:

1、客户端要求用户给予授权
2、用户同意给予授权
3、根据上一步获得的授权,向认证服务器请求令牌(token)
4、认证服务器对授权进行认证,确认无误后发放令牌
5、客户端使用令牌向资源服务器请求资源
6、资源服务器使用令牌向认证服务器确认令牌的正确性,确认无误后提供资源

服务端代码实现

第一步:新建一个webapi空项目

第二步:添加Nuget包:IdentityServer4

第三步:新建一个帮助类(类名自定义即可),用来创建IdentityServer4.Model生成授权token

    public class Config{/// <summary>/// 所有可以访问的Resource/// </summary>/// <returns></returns>public static IEnumerable<ApiResource> GetResources(){return new List<ApiResource>{          //第一个参数需要与下面标记红色字体保持一致,可以随意命名,但是请注意大小写,第二个参数 我干了,你随意。new ApiResource("api","My Api")};}/// <summary>/// 客户端/// </summary>/// <returns></returns>public static IEnumerable<Client> GetClients(){return new List<Client>{new Client(){ClientId="client",////模式:最简单的模式AllowedGrantTypes=GrantTypes.ClientCredentials,ClientSecrets={new Secret("secret".Sha256())},AllowedScopes={ "api"}}};}}

第一处坑讲解:上面代码红色标记,请注意大小写,如果一个大写,一个小写。当你授权的时候会提示错误

第四步:修改Startup.cs  红色字体是需要加的方法和中间件

public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){            services.AddIdentityServer().AddDeveloperSigningCredential()//添加开发人员签名凭据.AddInMemoryApiResources(Config.GetResources())//添加内存apiresource.AddInMemoryClients(Config.GetClients());//添加内存client
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseIdentityServer();//使用IdentityServer
            app.UseMvc();}}

第五步:修改Program.cs  其实这一步可以省略掉,因为这一部将api不托管在IIS Express上,通过控制台程序启动。  自定义路径配置如下

public class Program{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>()          //该处端口可以自定义  只要不与你其他端口冲突就好.UseUrls("http://localhost:5000");}

第二处坑讲解:生成token的服务端已经全部设置完成,如果你按照以前习惯,启动F5---会发现自定义端口未起作用。你需要设置一下才行

http://localhost:5000/.well-known/openid-configuration访问 ;可以看到是一个restful的api

然后用postman神器 服务端成功,咱们开始用客户端

客户端代码实现

第一步:新建一个webapi空项目

第二步:添加Nuget包:IdentityServer4.AccessTokenValidation

第三步:修改Startup.cs  红色字体是需要加的方法和中间件

public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){            services.AddAuthentication("Bearer")//添加授权模式.AddIdentityServerAuthentication(Options =>{Options.Authority = "http://localhost:5000";//授权服务器地址Options.RequireHttpsMetadata = false;//是否是httpsOptions.ApiName = "api";});services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseAuthentication();//使用授权中间件
app.UseMvc();}}

第三处坑讲解:

1.授权服务地址端口号,请按照服务端配置的端口号来,如果用IIS Express,请右键项目属性->调试查看。

2.Options.ApiName = "api";   请看上述踩坑一配置的名称,大小写需要统一

第四步:修改Program.cs  其实这一步可以省略掉,因为这一部将api不托管在IIS Express上,通过控制台程序启动。与上述服务端配置一样。记得将端口号修改

第四处需要注意的地方

需要将服务端运行起来,然后再运行客户端(顺序不重要,重要的是必须两个程序都启动起来。可以将服务端发布到IIS上,客户端通过vs运行。我比较懒,分别打开两个,一个设置为启动服务端,一个设置为启动客户端)

第五步:添加授权标签   可以在action和controller上添加

        [HttpGet][Authorize] public ActionResult<IEnumerable<string>> Get(){return new string[] { "value1", "value2" };}

添加在action上,表示这个方法需要授权才能访问,否则访问不了

添加在controller上,表示整个controller下的所有action方法都需要授权后才能访问

下图是成功,如果空白表示授权失败(你可以打个断点)。

出现一些错误码html(<title>Internal Server Error</title>)在里面,是因为服务端没启动成功

需要注意的地方:授权码  前面必须加Bearer 然后空格

在客户端配置第三步中 services.AddAuthentication("Bearer")//添加授权模式  有的同学可能会想  那我将这个改掉  然后保持一致应该可以

恭喜这位同学想法非常棒,但是你可以试一试。这个格式是固定规范

转载于:https://www.cnblogs.com/xiaobai123/p/9284874.html

ASP.NET Core IdentityServer4 新手上路相关推荐

  1. Asp.Net Core IdentityServer4 管理面板集成

    前言 IdentityServer4(以下简称 Id4) 是 Asp.Net Core 中一个非常流行的 OpenId Connect 和 OAuth 2.0 框架,可以轻松集成到 Asp.Net C ...

  2. Asp.Net Core 中IdentityServer4 实战之角色授权详解

    一.前言 前几篇文章分享了IdentityServer4密码模式的基本授权及自定义授权等方式,最近由于改造一个网关服务,也用到了IdentityServer4的授权,改造过程中发现比较适合基于Role ...

  3. Asp.Net Core 中IdentityServer4 实战之 Claim详解

    一.前言 由于疫情原因,让我开始了以博客的方式来学习和分享技术(持续分享的过程也是自己学习成长的过程),同时也让更多的初学者学习到相关知识,如果我的文章中有分析不到位的地方,还请大家多多指教:以后我会 ...

  4. Asp.Net Core 中IdentityServer4 授权流程及刷新Token

    一.前言 上面分享了IdentityServer4 两篇系列文章,核心主题主要是密码授权模式及自定义授权模式,但是仅仅是分享了这两种模式的使用,这篇文章进一步来分享IdentityServer4的授权 ...

  5. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,搜索到的IdentityServer4 的应用文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  6. 10个小技巧助您写出高性能的ASP.NET Core代码

    今天这篇文章我们来聊一聊如何提升并优化ASP.NET Core应用程序的性能,本文的大部分内容来自翻译,当然中间穿插着自己的理解,希望对大家有所帮助!话不多说开始今天的主题吧! 我们都知道性能是公共网 ...

  7. asp.net core系列 53 IdentityServer4 (IS4)介绍

    一.概述 在物理层之间相互通信必须保护资源,需要实现身份验证和授权,通常针对同一个用户存储.对于资源安全设计包括二个部分,一个是认证,一个是API访问. 1 认证 认证是指:应用程序需要知道当前用户的 ...

  8. ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  9. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范

    原文:ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范 IdentityServer实现以下规范: OpenID Connect OpenID Connect ...

最新文章

  1. python入门看什么书-请问初学者学Python看那本书?
  2. android更改menu字体颜色,Android动态修改menu颜色
  3. react学习(61)--js contact
  4. vscode vetur 不想标签属性老是转行 配置
  5. java model 封装_Java封装统一的Result Model案例
  6. ECCV 2020 论文大盘点-3D人体姿态估计篇
  7. 洛谷 P1404 平均数
  8. 为什么事业单位公务员的公积金比企业里要缴得多?
  9. python3编译成exe运行_python3.x的程序如何打包成exe可执行文件
  10. 如何选择 Offer?
  11. 【Java中的网络编程】
  12. 简单测试Content-Length和Chunked两种不同的数据传输方式
  13. ST电机库无感FOC模式接电机前准备工作(1)----PWM波的生成
  14. mysql中clear怎么用_MySQL 入门篇
  15. PowerBuilder 2017R3安装指南2021最新
  16. Utils 前端随机生成id,中文姓名
  17. Easyx图形库小游戏---迷宫
  18. 高中数学联赛二试怎么准备
  19. 关于coutends你不知道的那些事
  20. 一款好用的基于vue的录屏插件recordrtc,拿走不谢

热门文章

  1. 输出节点位移_绝对值信号的编码器有哪些信号输出(一、二)
  2. python socket recvfrom_Python socket学习笔记(一)
  3. 【Android OpenGL ES 开发 (四)】纹理相关(一)
  4. ​嵌入式开发为什么选择C语言?
  5. 计算机病毒需要附着在,计算机病毒是如何传播的?
  6. php验证码 php中文网,ThinkPHP 使用不同风格及中文的验证码
  7. 简单比对照片是否相同_小新说法 | 如何认定商标是否侵权?
  8. [渝粤教育] 郑州大学 互联网国际政治学 参考 资料
  9. [渝粤教育] 西南科技大学 经济法概论 在线考试复习资料2021版(3)
  10. 【渝粤题库】陕西师范大学202831 程序设计 作业(专升本)