IdentityServer4在Asp.Net Core中的应用(二)
继续上次授权的内容,客户端模式后我们再说以下密码模式,先回顾下密码模式的流程:
我们还是使用上次的代码,在那基础上修改,在IdentityServer4里面有一个IdentityServer4.Test的引用,它里面包含了测试用户的类,我们先将这个引用添加进来,并配置我们的用户信息,修改Config类,添加一个GetTestUsers()方法,当然在实际项目中,我们需要去从我们的数据库中去读取用户名及密码等信息,这里只做测试,添加内容如下:
我们再添加一个客户端,更改其授权模式为密码模式,内容如下:
修改其授权模式为ResourceOwnerPassword,下面再将我们的用户依赖注入到系统中,
至此我们的授权服务器已经修改完成,我们通过Postman测试是否可以拿到我们的access_token
OK,测试成功。我们的Api是不需要改动的,下面我们再新创建一个第三方应用程序,去请求授权并获取资源,代码如下
using System;
using System.Net.Http;
using IdentityModel;
using IdentityModel.Client; namespace ThirdPartyAppByPwd
{
class Program
{
static void Main(string[] args)
{
//请求授权服务器
var diso=DiscoveryClient.GetAsync("http://localhost:5000").Result;
if(diso.IsError)
{
Console.WriteLine(diso.Error);
} //授权服务器根据客户端发来的请求返回令牌
var tokenClient=new TokenClient(diso.TokenEndpoint,"pwdClient","pwdSecrect");
//使用密码模式
var tokenResponse =tokenClient.RequestResourceOwnerPasswordAsync("allen","123456","api").Result;
if(tokenResponse.IsError)
{
Console.WriteLine(tokenResponse.Error);
}
//如果成功,则打印输出返回的令牌信息
else
{
Console.WriteLine(tokenResponse.Json);
} //创建HttpClient对象
var httpClient=new HttpClient(); //设置Authorization的Value值
httpClient.SetBearerToken(tokenResponse.AccessToken); //根据授权服务器返回的令牌信息请求Api资源
var response= httpClient.GetAsync("http://localhost:5001/api/values").Result; //如果返回结果为成功,输出Api资源的结果
if(response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
}
}
}
只改动了两个地方,把ClientID和ClientSecret的值修改了,以及请求授权服务器的方法改为:
RequestResourceOwnerPasswordAsync(username,password,scope),运行结果如下:
以上就是完整的密码模式的授权,下面是对以上的简化流程:
扫描二维码关注我的公众号,共同学习,共同进步!
IdentityServer4在Asp.Net Core中的应用(二)的更多相关文章
- (12)ASP.NET Core 中的配置二(Configuration)
1.内存配置 MemoryConfigurationProvider使用内存中集合作为配置键值对.若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemory ...
- IdentityServer4在Asp.Net Core中的应用(一)
IdentityServer4是一套身份授权以及访问控制的解决方案,专注于帮助使用.Net 技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录.身份管理.授权和API安全. 下面我将具体 ...
- IdentityServer4在Asp.Net Core中的应用(三)
今天的内容是授权模式中的简化模式,还是先看以下授权流程图: 在这种模式中我们将与OpenID结合使用,所以首先我们要了解OpenID和OAuth的区别,关于他们的区别,在我上一篇博客<理解Ope ...
- (13)ASP.NET Core 中的选项模式(Options)
1.前言 选项(Options)模式是对配置(Configuration)的功能的延伸.在12章(ASP.NET Core中的配置二)Configuration中有介绍过该功能(绑定到实体类.绑定至对 ...
- Asp.Net Core 中IdentityServer4 授权中心之应用实战
一.前言 查阅了大多数相关资料,查阅到的IdentityServer4 的相关文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...
- Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...
- Asp.Net Core 中IdentityServer4 授权原理及刷新Token的应用
一.前言 上面分享了IdentityServer4 两篇系列文章,核心主题主要是密码授权模式及自定义授权模式,但是仅仅是分享了这两种模式的使用,这篇文章进一步来分享IdentityServer4的授权 ...
- Asp.Net Core 中IdentityServer4 实战之 Claim详解
一.前言 由于疫情原因,让我开始了以博客的方式来学习和分享技术(持续分享的过程也是自己学习成长的过程),同时也让更多的初学者学习到相关知识,如果我的文章中有分析不到位的地方,还请大家多多指教:以后我会 ...
- Asp.Net Core 中IdentityServer4 实战之角色授权详解
一.前言 前几篇文章分享了IdentityServer4密码模式的基本授权及自定义授权等方式,最近由于改造一个网关服务,用到了IdentityServer4的授权,改造过程中发现比较适合基于Role角 ...
随机推荐
- 012-基于 git hooks 的前端代码质量控制解决方案
原文看这里:https://github.com/kuitos/kui...全部文章看这里 https://github.com/kuitos/kui... 国际惯例先说下故事背景 通常情况下,如果我 ...
- node.js---sails项目开发
http://sailsdoc.swift.ren/ 这里有 sails中文文档 node.js---sails项目开发(1)安装,启动sails node.js---sails项目开发(2)安装测试 ...
- rtsp/rtmp/hls/onvif测试源以及ffmpeg在流媒体方面的应用
一.rtsp/rtmp/hls/onvif测试源 1. rtsp rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov 2.rtmp rtmp://l ...
- [golang note] 内建类型
基础类型 √ golang内建基础类型有布尔类型.整数类型.浮点类型.复数类型.字符串类型.字符类型和错误类型. 复合类型 √ golang支持的复合类型有指针.数组.数组切片.字典.通道.结构体和接 ...
- 文本文件显示 删除文本文件前n个字符
#include<iostream>#include<string.h>using namespace std;void displayContent(const char * ...
- 002-启动spring boot应用
一.idea启动. 1.在src目录里面找到启动类(包含主函数的类)DemoApplication,然后在该类里面右键,选择run DemoApplication.main,即spring boot应 ...
- AtCoder Regular Contest 080 C - 4-adjacent
地址:http://arc080.contest.atcoder.jp/tasks/arc080_a 题目: C - 4-adjacent Time limit : 2sec / Memory lim ...
- centos7 离线安装docker-ce
测试的时候,在VM中安装了一个minimal安装的centos7.因为发现在已经安装好环境的系统中,执行下面,并不会下载依赖的rpm.#下载docker-ce和其需要的依赖rpm yum instal ...
- 【Linux学习】3.Linux常见配置文件
一./etc 配置文件/etc/passwd 用户数据库,其中的域给出了用户名.真实姓名.家目录.加密口令和用户的其他信息 /etc/group 类似/etc/passwd ,但说明的不是用户而是组. ...
- Python3.x:zip()函数
Python3.x:zip()函数 1,概述: zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表: 2,示例: (1).示例1: x = [1, 2, 3] y = [4, ...