ASP.NET Core的身份认证框架IdentityServer4--(1)服务配置
官网文档地址:点我点我
准备
创建一个名为IdentityServer
的ASP.NET Core Web Api 项目,端口5000
创建一个名为Api
的ASP.NET Core Web Api 项目,端口5001
创建一个名为Web
的应用程序,端口5002
基本配置
首先创建一个新的ASP.NET Core项目。
然后选择“空白”选项。
注:这里创建空的应用程序是为了后面方便引入UI界面
接下来,使用nuget添加IdentityServer4
包
或者,也可以使用软件包管理器控制台通过运行以下命令来添加依赖项
Install-Package IdentityServer4
在IdentityServer
中使用通常的模式来配置和添加服务到ASP.NET Core Host
在ConfigureServices
中,所有的服务必须配置并且依赖注入到系统中。
在Configure
中,中间件被添加到HTTP管道中。
public void ConfigureServices(IServiceCollection services)
{
//配置身份服务器与内存中的存储,密钥,客户端和资源
services.AddIdentityServer().AddDeveloperSigningCredential();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//添加到HTTP管道中。
app.UseIdentityServer(); app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
AddIdentityServer
方法在依赖注入系统中注册IdentityServer,它还会注册一个基于内存存储的运行时状态,这对于开发场景非常有用,对于生产场景,您需要一个持久化或共享存储,如数据库或缓存。
扩展的AddDeveloperSigningCredential
用于签署令牌创建临时密钥。
修改hosting
修改启动端口,打开Properties下的launchSettings.json修改applicationUrl
中的端口改为5000,注:这里修改启动端口是为了方便调试
使用客户端凭证保护API
在这种情况下,我们将定义一个API和一个想要访问它的客户端。客户端将在IdentityServer
上请求访问令牌,并使用它来访问API。
在IdentityServer
项目中新建个Config.cs
类,并添加以下代码:
/// <summary>
/// 定义api信息
/// </summary>
/// <returns></returns>
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1", "My API")
};
}
ps:ApiResource
类为IdentityServer
中的实体类,这里引用IdentityServer4.Models
命名空间即可。
定义客户端
定义一个可以访问这个API的客户端。对于这种情况,客户端将不具有交互式用户,并将使用IdentityServer
的所有客户端密钥进行身份验证。在Config.cs
中添加如下代码:
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",
//没有交互式用户,使用clientid / secret进行身份验证
AllowedGrantTypes = GrantTypes.ClientCredentials,
//秘密认证
ClientSecrets =
{
new Secret("secret".Sha256())
},
//客户端可以访问的范围
AllowedScopes = {"api1"}
}
};
}
注册IdentityServer服务
要配置IdentityServer
以便使用定义好的访问控制,您需要向该ConfigureServices
方法添加代码。您可以使用方便的扩展方法 ,将相关的存储和数据添加到DI系统中:
public void ConfigureServices(IServiceCollection services)
{
//配置身份服务器与内存中的存储,密钥,客户端和资源
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())//添加api资源
.AddInMemoryClients(Config.GetClients());//添加客户端
}
运行项目并在浏览器中访问:http://localhost:5000/.well-known/openid-configuration
,可以看到所有的文档。这将被您的客户端和API用于下载必要的配置数据。
ASP.NET Core的身份认证框架IdentityServer4--(1)服务配置的更多相关文章
- ASP.NET Core的身份认证框架IdentityServer4--(3)令牌服务配置访问控制跟UI添加
使用密码保护API OAuth 2.0 资源所有者密码授权允许一个客户端发送用户名和密码到IdentityServer并获得一个表示该用户的可以用于访问api的Token. 该规范建议仅对" ...
- ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问
前言 今天(2017-9-8,写于9.8,今天才发布)一口气连续把最后几篇IdentityServer4相关理论全部翻译完了,终于可以进入写代码的过程了,比较累.目前官方的文档和Demo以及一些相关组 ...
- ASP.NET Core的身份认证框架IdentityServer4(1)-特性一览
IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.OpenID和OAuth 的区别请看 https://www.zhihu.com/ques ...
- ASP.NET Core的身份认证框架IdentityServer4(6)- 开始
安装和概述 启动一个新的IdentityServer项目有两种基本方法: 从头开始 从Visual Studio中的ASP.NET身份模板开始 如果从头开始,我们提供了一些文档.项目帮助和内存存储支持 ...
- ASP.NET Core的身份认证框架IdentityServer4(5)- 包和构建
包和构建 IdentityServer有许多nuget包 IdentityServer4 nuget | github 包含IdentityServer核心对象模型,服务和中间件. 仅支持内存配置和用 ...
- ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证
OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...
- ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释
IdentityServer4 术语 IdentityServer4的规范.文档和对象模型使用了一些你应该了解的术语. 身份认证服务器(IdentityServer) IdentityServer是一 ...
- ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问
前言 本文及IdentityServer这个系列使用的都是基于.net core 2.0的.上一篇博文在API项目中我使用了icrosoft.AspNetCore.Authentication.Jwt ...
- ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
IdentityServer实现以下规范: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 (sp ...
- ASP.NET Core的身份认证框架IdentityServer4--入门
ASP.NET Core的身份认证框架IdentityServer4--入门 2018年08月11日 10:09:00 qq_42606051 阅读数 4002 https://blog.csdn ...
随机推荐
- 系列3|走进Node.js之多进程模型
文:正龙(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 之前的文章"走进Node.js之HTTP实现分析"中,大家已经了解 Node.js 是如何处理 HTTP 请求 ...
- 序列化和Json
实现了python与python程序之间内存的交互 常用场景: 1 把内存的数据写到磁盘 2 socket只能传字符串,二进制,通过序列化 ============================== ...
- Windows核心编程&线程
1. 线程上下文:线程内核对象保存线程上一次执行时的CPU寄存器状态 2. 线程上下文切换 3. windows操作系统为抢占式多线程操作系统,系统可以在任何时刻停止一个线程而另行调度另外一个线程.我 ...
- 转-WebService到底是什么?
原文链接:WebService到底是什么? 一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多 ...
- ecplise最有用的8个快捷键
1. ctrl+shift+r 打开资源 这组快捷键可以让你打开你工作区中的任何一个文件.而你只需要按下键盘的文件名或前几个字母 美中不足的是这组快捷键并非在所有视图下都能用. 2.ctrl+o:快速 ...
- DAY10-万物皆对象-2018-2-2
许久没有写了,虽然每天都有在学,但是学的东西也少了,后面难度慢慢加大,学习速度也是变慢了.这是许多天积累下来的笔记,从第一次接触对象,到慢慢去了解,现在处于还待深入了解的状态.万物皆对象,那是不是说没 ...
- 【转】TCHAR
TCHAR 就是当你的字符设置为什么就是什么例如: 当程序编译为 ANSI, TCHAR 相当于 CHAR当程序编译为 UNICODE, TCHAR 相当于WCHAR char ...
- 【转】shell学习笔记(二) ——shell变量
在shell中有3种变量:系统变量,环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要设置,用户变量在编程过程中使用量最多. 1 系统变量 变量名 ...
- 13 Basic Cat Command Examples in Linux(转) Linux中cat命令的13中基本用法
Cat (串联) 命令是Linux/Unix开源系统中比较常用的一个命令.我们可以通过Cat命令创建一个或多个文件,查看文件内容,串联文件并将内容输出到终端设备或新的文件当中,这篇文章我们将会以实例的 ...
- mysql数据库在Linux下安装与配置
mysql是一种开放源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. 由于mysql的开源,因此任何人都可以在General Publ ...