预备知识: 学习Identity Server 4的预备知识

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/

官方文档很详细的.

使用OAuth可以更安全, 这里我们的authorization server和web api 以及网站将分别独立运行.

建立authorization server

建立asp.net core 项目使用空模板.

项目建立后, 运行方式改为使用控制台运行而不是IISExpress, 以便查看各种debug信息.

打开launchSettings.json:

{  "profiles": {    "AuthServer": {      "commandName": "Project",      "launchBrowser": true,      "environmentVariables": {           "ASPNETCORE_ENVIRONMENT": "Development"},   "applicationUrl": "http://localhost:5000/"}}
}

把IISExpress相关的内容删掉, 然后端口改为5000.

Program.cs里的BuildWebHost也应该加上Url:

        public static IWebHost BuildWebHost(string[] args) =>WebHost.CreateDefaultBuilder(args)                .UseUrls("http://0.0.0.0:5000").UseStartup<Startup>().Build();

其实不加也好用.

运行就会弹出控制台:

安装Identity Server4:

打开nuget, 搜索 identityserver4:

安装即可.

配置asp.net core 管道

打开startup.cs, 编辑Configure方法:

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

就是使用上面这个中间件.

配置Identity Server

还是Startup.cs,编辑ConfigureServices方法:

这里不仅要把IdentityServer注册到容器中, 还要至少对其配置三点内容:

1. 哪些API可以使用这个authorization server.

2. 那些客户端Client(应用)可以使用这个authorization server.

3. 指定可以使用authorization server授权的用户.

首先需要把上面这些做成一个配置文件:

建立Configuration/InMemoryConfiguration.cs:

namespace AuthServer.Configuration
{         public class InMemoryConfiguration{            public static IEnumerable<ApiResource> ApiResources(){                    return new[]{                new ApiResource("socialnetwork", "社交网络")};}       

        public static IEnumerable<Client> Clients(){            return new[]{                new Client{ClientId = "socialnetwork",ClientSecrets = new [] { new Secret("secret".Sha256()) },AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,AllowedScopes = new [] { "socialnetwork" }}};}      

        public static IEnumerable<TestUser> Users(){            return new[]{                new TestUser{SubjectId = "1",Username = "mail@qq.com",Password = "password"}};}}
}

ApiResources: 这里指定了name和display name, 以后api使用authorization server的时候, 这个name一定要一致, 否则就不好用的.

Clients: Client的属性太多了, 这里就指定几个. 其中ClientSecrets是Client用来获取token用的. AllowedGrantType: 这里使用的是通过用户名密码和ClientCredentials来换取token的方式. ClientCredentials允许Client只使用ClientSecrets来获取token. 这比较适合那种没有用户参与的api动作. AllowedScopes: 这里只用socialnetwork

Users: 这里的内存用户的类型是TestUser, 只适合学习和测试使用, 实际生产环境中还是需要使用数据库来存储用户信息的, 例如接下来会使用asp.net core identity. TestUser的SubjectId是唯一标识.

然后回到StartUp的ConfigureServices:

前一篇文章讲过, 我们需要对token进行签名, 这意味着identity server需要一对public和private key. 幸运的是, 我们可以告诉identity server在程序的运行时候对这项工作进行设定: AddDeveloperSigningCredential(), 它默认会存到硬盘上的, 所以每次重启服务不会破坏开发时的数据同步. 这个方法只适合用于identity server4在单个机器运行, 如果是production farm你得使用AddSigningCredential()这个方法.

 public void ConfigureServices(IServiceCollection services)
{services.AddIdentityServer().AddDeveloperSigningCredential().AddTestUsers(InMemoryConfiguration.Users().ToList()).AddInMemoryClients(InMemoryConfiguration.Clients()).AddInMemoryApiResources(InMemoryConfiguration.ApiResources());
}

然后运行一下:

没报错, 红线部分是内存配置版的一些解释.

获取Token

打开postman, 如果你无法安装postman, 也无法进入Chrome商店, 那么你可以买一个海外服务器, 使用shadowsocks服务器和客户端进行代理, 然后就可以访问google了.

首先我们发送一个错误的client_id, 然后得到的结果是: invalid_client. 控制台的信息如下:

然后我们再发送一个正确的数据:

这次获取到了token. 控制台信息如下:

由于identity server我们设置的是 ResourceOwnerPasswordAndClientCredentials 这个GrantType, 所以使用用户名密码以及使用ClientCredentials都可以. 那我们把用户名和密码去掉, 只发送Client Credentials:

仍然获取到了token. 控制台上的信息与上一个稍有不同, 没有user相关的信息了:

使用正经的证书:

证书可以通过几种渠道获得, 可以购买, 可以使用IIS生成, 也可以使用Openssl这样的工具生成证书. 我就使用openssl吧.

去openssl的windows官网: https://slproweb.com/products/Win32OpenSSL.html

下载 1.1.0版: https://slproweb.com/download/Win64OpenSSL-1_1_0f.exe

安装后, 打开命令行.

openssl req -newkey rsa:2014 -nodes -keyout socialnetwork.key -x509 -days 365 -out socialnetwork.cer

具体的信息就不管了. 这个证书的有效期是365天, 命令参数里面设定的.

这是生成的文件:

一个证书和一个key, 然后我们需要给他们俩封装成一个文件, 以便identity server可以使用它们去正确的签名tokens. 这就需要使用另一个命令:

openssl pkcs12 -export -in socialnetwork.cer -inkey socialnetwork.key -out socialnetwork.pfx

这里发生了错误...那就使用管理员打开命令行:

输入密码和确认密码后, 没问题了.

pfx就是我们需要的文件.

然后修改一个Startup的ConfigureServices:

 public void ConfigureServices(IServiceCollection services)
{services.AddIdentityServer()                // .AddDeveloperSigningCredential()                .AddSigningCredential(new X509Certificate2(@"D:\Projects\test\socialnetwork.pfx", "password")).AddTestUsers(InMemoryConfiguration.Users().ToList()).AddInMemoryClients(InMemoryConfiguration.Clients()).AddInMemoryApiResources(InMemoryConfiguration.ApiResources());
}

现在运行程序的话, 啥也不显示. 那么接下来, 就

添加像样的UI

Identity Server 4 提供了一套QuickStart UI : https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/tree/release

在项目根目录打开Powershell(可以在项目根目录, 按住shift, 点击右键的Powershell)

然后输入命令:

iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/IdentityServer/IdentityServer4.Quickstart.UI/release/get.ps1'))

然后就把UI下载到项目了.

看看生成的文件, 很多:

由于有wwwroot下很多静态文件, 所以asp.net core 需要启用服务静态文件的功能: 修改Startup的Configure方法:

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

使用静态文件, 并且使用了MVC.

别忘了在ConfigureServices里面注册MVC:

public void ConfigureServices(IServiceCollection services){services.AddIdentityServer()                // .AddDeveloperSigningCredential().AddSigningCredential(new X509Certificate2(@"D:\Projects\test\socialnetwork.pfx", "Bx@steel")).AddTestUsers(InMemoryConfiguration.Users().ToList()).AddInMemoryClients(InMemoryConfiguration.Clients()).AddInMemoryApiResources(InMemoryConfiguration.ApiResources());            services.AddMvc();}

然后运行一下试试:

它现在已经具备了这些功能!

使用TestUser也可以登陆成功:

当然这个UI可以根据情况自行定义.

相关文章:

  • IdentityServer4(OAuth2.0服务)折腾笔记

  • IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

  • IdentityServer4 使用OpenID Connect添加用户身份验证

  • IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

  • IdentityServer4 指定角色授权(Authorize(Roles="admin"))

  • IdentityServer4 SigningCredential(RSA 证书加密)

  • IdentityServer4 实现自定义 GrantType 授权模式

  • IdentityServer4 配置负载均衡

  • 学习Identity Server 4的预备知识

原文地址:http://www.cnblogs.com/cgzl/p/7780559.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

使用Identity Server 4建立Authorization Server (1)相关推荐

  1. 使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端

    预备知识: 学习Identity Server 4的预备知识 第一部分: 使用Identity Server 4建立Authorization Server (1) 第二部分: 使用Identity ...

  2. 使用Identity Server 4建立Authorization Server (5)

    预备知识: 学习Identity Server 4的预备知识 第一部分: 使用Identity Server 4建立Authorization Server (1) 第二部分: 使用Identity ...

  3. 使用Identity Server 4建立Authorization Server (4)

    预备知识: http://www.cnblogs.com/cgzl/p/7746496.html 第一部分: http://www.cnblogs.com/cgzl/p/7780559.html 第二 ...

  4. 使用Identity Server 4建立Authorization Server (2)

    第一部分: http://www.cnblogs.com/cgzl/p/7780559.html 第一部分主要是建立了一个简单的Identity Server. 接下来继续: 建立Web Api项目 ...

  5. 使用Identity Server 4建立Authorization Server (3)

    预备知识: http://www.cnblogs.com/cgzl/p/7746496.html 第一部分: http://www.cnblogs.com/cgzl/p/7780559.html 第二 ...

  6. Spring官宣新家族成员:Spring Authorization Server!

    8月17日,Spring官方宣布 Spring Authorization Server 已正式脱离实验状态,并进入Spring-Project家族! 官方声明 此举恰逢本周的 0.2.0 版本发布, ...

  7. 前沿资讯|Spring Native 0.11.2、Spring Authorization Server 0.2.2 发布

    近日,Spring官方又更新了两个前沿内容,分别是Spring Native 0.11.2 和Spring Authorization Server 0.2.2 .下面一起来看看分别都更新了些什么. ...

  8. 授权服务框架Spring Authorization Server的过滤器链

    上一篇我们初次体验了Spring Authorization Server,很多粉丝都希望对这个新授权框架有进一步了解.所以今天我们再进一步再从配置上来了解和OAuth2.0授权服务器相关的过滤器,进 ...

  9. 全新的Spring Authorization Server快速入门

    11月8日Spring官方已经强烈建议使用Spring Authorization Server替换已经过时的Spring Security OAuth2.0[1],距离Spring Security ...

最新文章

  1. CSS3-transition,过渡实例
  2. 在OR项目中使用火焰图
  3. SETRANGE key offset value
  4. 27 | 案例篇:为什么我的磁盘I/O延迟很高?
  5. linux 命令记录
  6. 多媒体个人计算机软件系统,HP推出新的多媒体个人计算机
  7. 认识JQuery的三天--看视频得到的一些小知识点
  8. 解决ThinkServer TS250中网卡在centos6.5中没有安装驱动
  9. 又是一年“剁手”时,AI一下更优惠?
  10. QQ群排名霸屏:快速上排名方法
  11. 快速生成数据库文档--screw
  12. NoteExpress基础使用
  13. 免实名域名是什么意思?
  14. Python Day 67 Dango框架图解(总结)、Wsgiref和uwsgi、前后端传输数据的编码格式、From表单和Ajax方式在前端往后端发送文件、补充一下页面清缓存...
  15. windows下强大的系统监视工具Procmon(Process Monitor)
  16. 赤喀高铁正式通车,日立电梯助力赤峰西站开通运营
  17. Python绝技第一章 入门 python3实现密码破解
  18. 一只喵的西行记-3 唱斑马斑马的黑马
  19. DELL 电脑 ubuntu20.04系统安装(最新最简版)
  20. 1小时等于36000毫秒的计算方法

热门文章

  1. MyBatis学习总结(17)——Mybatis分页插件PageHelper
  2. 3D版的TagView,效果很赞
  3. 中小企业SaaS型软件BI的发展前景
  4. js与Ajax实现浮动留言板(留言写入sqlserver数据库)
  5. [有奖励]GeneralUpdate开源项目招募开发者
  6. 一款强大的Kubernetes API流量查看神器
  7. 22504!Windows 11 新预览版发布
  8. iNeuOS工业互联网,增加一批PLC、核工业、数字模块、传感器等设备驱动
  9. 简单三分钟,本地搭建k8s
  10. 6月统计|.NET薪资一旦高起来,岂是其他语言能比的!