博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IdentityServer4 学习笔记[1]-客户端授权
阅读量:5167 次
发布时间:2019-06-13

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

前言

本文内容来自,官网有详细的介绍,并且有源码Demo

建立授权服务端

1639073-20190326204553213-1659266918.png

我们暂时不配置Https,选择空模板建立项目,项目建立后, 为了查看debug信息,我们使用控制台来启动,打开launchSettings.json,删除红色部分,其实也可以不删,选择运行按钮后的倒三角来选择也是可以的
1639073-20190326205800683-1579843576.png
好了,操作OK后,我们运行一下看看,端口监听OK,如果这一步失败的,看看端口是否被占用了,或者修改下端口
1639073-20190326205033354-962366961.png

安装IdentityServer4

在项目上右键菜单里选择管理Nuget程序包,在左上角浏览里输入IdentityServer4,找到并且安装,当然也可以在程序包管理器控制台里面安装,后文不再介绍nuget包安装

1639073-20190326205038385-1235347667.png
在Startup中添加
app.UseIdentityServer()

public void Configure(IApplicationBuilder app, IHostingEnvironment env){    if (env.IsDevelopment())    {        app.UseDeveloperExceptionPage();    }          app.UseIdentityServer();}

配置授权服务端

IdentityServer现在也Use过了,但是我们没有数据,我也不打算从数据库获取,那怎么办呢?使用内存造点配置数据来模拟场景,生产场景配置数据应该从数据库或者配置文件获取新建Config.cs

public class Config    {        ///         /// 模拟Api资源配置数据        ///         /// 
public static IEnumerable
GetApis() { return new List
{ new ApiResource("api1", "My API") }; } ///
/// 模拟客户端配置数据 /// ///
public static IEnumerable
GetClients() { return new List
{ new Client { ClientId = "client", //授权方式为客户端授权,类型可参考GrantTypes枚举 AllowedGrantTypes = GrantTypes.ClientCredentials, //授权密钥,客户端和服务端事先约定的一个Key ClientSecrets = { new Secret("secret".Sha256()) }, //允许客户端访问的Scopes[作用域] AllowedScopes = { "api1" } } }; } ///
/// 模拟授权资源 /// ///
public static IEnumerable
GetIdentityResources() { return new IdentityResource[] { new IdentityResources.OpenId() }; } }

IdentityServer有关的配置介绍,官网有介绍,本文就不再重复了,下面有链接

下面把IdentityServer以及配置注册到IOC容器中,如下代码所示

public void ConfigureServices(IServiceCollection services){    services.AddIdentityServer()            .AddDeveloperSigningCredential()            .AddInMemoryClients(Config.GetClients())                         .AddInMemoryApiResources(Config.GetApis())            .AddInMemoryIdentityResources(Config.GetIdentityResources());}

验证授权服务端

可以自己新建个控制台项目,安装IdentityModel的nuget包来测试也可以,这里我们使用postman来测试刚刚建立的服务端程序

好了,先运行
1639073-20190326210652748-502355478.png
打开Postman,如果没有,可以自行下载安装
发现端点可通过/.well-known/openid-configuration相对于基地址获得
1639073-20190326210745749-663508867.png
如上图红色所示,我们使用红色标示的地址去拿Token,Postman截图如下所示
1639073-20190326210808488-11838432.png
我们获取到了Token,以及Token的过期时间,以及Token的类型,同时在控制台里看到
1639073-20190326210842131-1924818236.png
IdentityServer验证成功,也看到如ClientId,GrantType,Scopes,Raw等信息
如果把client_id 或者secret 故意填写错,再post的话获取Token会失败,如下所示
1639073-20190326210856398-1360154074.png
,所以client_id 和 secret 是客户端和服务端事先约定好的,必须一致,否则获取Token将失败

总结

本文介绍了IdentityServer4的基于客户端授权[客户端和服务端约定好client_id和client_secret的方式],这种方式适合那种没有用户参与的API的保护

转载于:https://www.cnblogs.com/sarco/p/10603387.html

你可能感兴趣的文章
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>