博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式
阅读量:5296 次
发布时间:2019-06-14

本文共 3510 字,大约阅读时间需要 11 分钟。

一、客户端模式介绍

客户端模式(Client Credentials Grant)是指客户端直接向认证服务(Authorization Server)发送认证请求,获取token,进行认证,一般适用于受信任的客户端。

576972-20180725090241270-1699245976.png
请求步骤为:

  • 客户端向认证服务器进行认证,并请求一个访问令牌token
  • 认证服务器进行认证,通过之后,返回客户端一个访问令牌。

二、创建认证服务

  • 创建一个认证服务IdentityServerCenter,通过NuGet安装IdentityServer4
  • 添加配置资源与客户端的文件,引入using IdentityServer4.Models
public class Config    {        public static IEnumerable
GetResources() { return new List
{ new ApiResource { Name = "ImageResource", Scopes={ new Scope ("ImageResource")},//Scopes必须配置,否则获取token时返回 invalid_scope }, new ApiResource { Name = "FileResourse" }, new ApiResource { Name="Api", Scopes={new Scope ("Api") } } }; } public static IEnumerable
GetClients() { return new List
{ new Client { ClientId = "ClientId", AllowedGrantTypes =GrantTypes.ClientCredentials,//授权模式:客户端模式 AllowedScopes={ "ImageResource","Api" }, //允许访问的资源 GetResources()中配置的 ClientSecrets={ new Secret { Value= "ClientSecret".Sha256(), Expiration=DateTime.Now.AddMinutes(5)} } } }; } }
  • 注入IdentityServer4,添加IdentityServer4配置
public void ConfigureServices(IServiceCollection services)        {            //注入IdentityServer   添加IdentityServer4配置            services.AddIdentityServer()                .AddDeveloperSigningCredential()                .AddInMemoryApiResources(Config.GetResources()) //添加配置的资源ApiResource                .AddInMemoryClients(Config.GetClients());//添加配置的客户端Client          //  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);        }
  • 使用IdentityServer4
public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {            //使用IdentityServer            app.UseIdentityServer();        }
  • 启动项
    576972-20180725090257941-1595328262.png
    由于未使用MVC,访问该api返回404。IdentityServer4提供一个地址可获取相关配置项。
http://examplehostname.com.well-known/openid-configuration/

访问 将返回的信息序列化如下

576972-20180725090317964-1069947647.png
scopes_supported": ["ImageResource", "Api", "offline_access"]即为Config中配置的访问的资源AllowedScopes

  • 使用postman获取token
    576972-20180725090331337-564434262.png
    grant_type为客户端授权client_credentials,client_idClient_SecretConfig中配置的ClientIdSecret。接下来创建一个可访问的资源。

三、创建资源服务

  • 创建一个资源服务项目ImageResourceApi
  • 注入认证
public void ConfigureServices(IServiceCollection services)        {            services.AddAuthentication(config => {                config.DefaultScheme = "Bearer";             }).AddIdentityServerAuthentication(option=> {                option.ApiName = "ImageResource";                 option.Authority = "http://localhost:5000"; //认证服务的url                option.ApiSecret = "ClientSecret".ToSha256();// 访问的secret                option.RequireHttpsMetadata = false;                            });            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);        }      public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            else            {                app.UseHsts();            }            app.UseHttpsRedirection();            //使用认证            app.UseAuthentication();            app.UseMvc();        }
  • 启动资源服务,返回401未授权;
  • 使用postman带着token请求资源服务ImageResourceApi,请求成功。
    576972-20180725090348387-1397375510.png

转载于:https://www.cnblogs.com/echogreat/p/9362780.html

你可能感兴趣的文章
Pattern Evaluation
查看>>
kindle--瓦尔登湖
查看>>
C++new/delete相关知识点详解
查看>>
spark使用Hive表操作
查看>>
[java]Clipboard:实现复制粘贴
查看>>
with as 如何工作
查看>>
unix设计十七条原则之一(unix编程艺术笔记)
查看>>
获取本月最后一天23点59分59秒
查看>>
Cookie实现:您曾经浏览过的商品记录
查看>>
windows安装多个版本的jdk,解决java-version和javac-version版本不一致的问题
查看>>
Python使用dict和set
查看>>
英语冷笑话
查看>>
LC 676. Implement Magic Dictionary
查看>>
2014华工复试数据库上机之SQL
查看>>
员工管理系统————首页登陆模块
查看>>
算法第3章上机实践报告
查看>>
逆向与BOF基础——注入shellcode并执行&Return-to-libc
查看>>
winform textbox.text设置换行技巧备忘
查看>>
转 NSRange 的用法
查看>>
Multi Thread.
查看>>