前言

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

官网源码例子传送门

建立授权服务端



我们暂时不配置Https,选择空模板建立项目,项目建立后, 为了查看debug信息,我们使用控制台来启动,打开launchSettings.json,删除红色部分,其实也可以不删,选择运行按钮后的倒三角来选择也是可以的



好了,操作OK后,我们运行一下看看,端口监听OK,如果这一步失败的,看看端口是否被占用了,或者修改下端口

安装IdentityServer4

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



在Startup中添加

app.UseIdentityServer()

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

配置授权服务端

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

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

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

ApiResource

Client

IdentityResource

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

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

验证授权服务端

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

好了,先运行



打开Postman,如果没有,可以自行下载安装

发现端点可通过/.well-known/openid-configuration相对于基地址获得



如上图红色所示,我们使用红色标示的地址去拿Token,Postman截图如下所示



我们获取到了Token,以及Token的过期时间,以及Token的类型,同时在控制台里看到



IdentityServer验证成功,也看到如ClientId,GrantType,Scopes,Raw等信息

如果把client_id 或者secret 故意填写错,再post的话获取Token会失败,如下所示



,所以client_id 和 secret 是客户端和服务端事先约定好的,必须一致,否则获取Token将失败

总结

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

IdentityServer4 学习笔记[1]-客户端授权的更多相关文章

  1. Mina框架的学习笔记——Android客户端的实现

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  2. IdentityServer4学习笔记汇总(实现传送门在底部)

    前言 互联网时代,对信息和资源的保护越发苛刻,在所有应用中授权和认证是必不可少缺少的一部分.如果一个应用没有授权和认证那么这个应用就是不完整或者说不安全的应用.在.Net平台给我们提供了一套完整的授权 ...

  3. IdentityServer4 学习笔记[2]-用户名密码验证

    回顾 上一篇介绍了IdentityServer4客户端授权的方式,今天来看看IdentityServer4的基于密码验证的方式,与客户端验证相比,主要是配置文件调整一下,让我们来看一下 配置修改 pu ...

  4. AMQ学习笔记 - 05. 客户端模板化

    概述 客户端编程模型中,大部分的步骤都是相同的.将相同的部分做成模板,将不同的部分预留接口,实现者就只需要针对不同的部分提供实现. 设计 类图 发送方客户端 说明: 基于模板的思想,SendTempl ...

  5. Netty4 学习笔记之一:客户端与服务端通信 demo

    前言 因为以前在项目中使用过Mina框架,感受到了该框架的强大之处.于是在业余时间也学习了一下Netty.因为Netty的主要版本是Netty3和Netty4(Netty5已经被取消了),所以我就直接 ...

  6. Docker学习笔记 - Docker客户端和服务端

    学习内容: Docker客户端和服务端的通讯方式:client和自定义程序 Docker客户端和服务端的连接方式:socket 演示Docker客户端和服务端之间用remote-api通讯:nc   ...

  7. Shiro学习笔记 三(认证授权)

    第一种首先基于角色的权限控制 1.由于不断的创建SecurityFactory工程等步骤重复多次,所以应该将这些步骤封装成一个工具类 还是首先看一下目录结构 主要用到文件 首先贴一下工具类的方法 pa ...

  8. FastSocket学习笔记~再说客户端与服务端的组成

    废话多说 很久之前,我写过几篇FastSocket的文章,基本属于使用的方法,而缺乏对概念的总结讲解,而本讲就是弥补一下上几讲的不足,将核心的模块再说说,再谈谈,再聊聊! 首先FastSocket由C ...

  9. HTML5学习笔记之客户端存储数据方法:localStorage(),sessionStorage()

    HTML5提供了两种在客户端存储数据的新方法: localStorage():没有时间限制的数据存储 sessionStorage():针对一个session的数据存储 下面的一个例子用localSt ...

随机推荐

  1. 2018-06-07 RF test 1 :TX Power test

    Test item: 1.Output power:   屏蔽网房-同轴线-频谱仪 The radio circuitry, generally referred to as the Device U ...

  2. nodejs stream基础知识

    分类 nodejs 的 stream 有四种: Readable:可读流 Writable: 可写流 Duplex:双工流 Transform:转换流 Readable // _read方法是从底层系 ...

  3. Struts2 - 运行流程分析

    1. 请求发送给 StrutsPrepareAndExecuteFilter 2. StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 St ...

  4. uoj problem 10

    uoj problem 10 题目大意: 给定任务若干,每个任务在\(t_i\)收到,需要\(s_i\)秒去完成,优先级为\(p_i\) 你采用如下策略: 每一秒开始时,先收到所有在该秒出现的任务,然 ...

  5. bzoj 3881: [Coci2015]Divljak AC自动机

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3881 题解: 这道题我想出了三种做法,不过只有最后一种能过. 第一种: 首先我们把所有的 ...

  6. 洛谷【P1080】国王游戏

    我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.luogu.org/problemnew/show/P10 ...

  7. iPhone白苹果怎么办?白苹果各种解决办法方法

    iPhone白苹果怎么办?白苹果各种解决办法方法 日期:2014-07-16 来源:爱思助手 浏览次数:60962 越狱后大家也疯狂的装入各种插件,由于一些插件会产生冲突,造成白苹果现象,无法进入手机 ...

  8. linux日常管理-netstat查看端口

    查看网络链接状况 查看监听端口 查看服务端 客户端链接状况 并发 ////////////////////////////////////////////////////////////////// ...

  9. CentOS 7 破解mariadb密码

    1.停止mariadb服务: systemctl stop mariadb 2.进入单用户模式: mysqld_safe  --skip-grant-tables & 3.切换到另外一个工作组 ...

  10. 为组件设定UI

    -----------------siwuxie095                             工程名:CustomizeSwing 包名:com.siwuxie095.swing 类 ...