使用IdentityServer4实现一个简单的Oauth2客户端模式授权
1、首先新建一个webAPI项目做为IdentityServer的服务端,提供生成Token的服务,首先修改Startup.cs文件,如下图:
2、增加一个Config.cs文件,以便于提供资源和认证设置,如下图:
3、在Startup.cs文件中配置做初始化:
4、好了,我们把网站启动,然后我们访问http://localhost:5000/.well-known/openid-configuration(http://localhost:5000是我的程序启动地址,可以在Program.cs文件中自己配置。.well-known/openid-configuration是程序的默认配置地址)然后返回如下内容,表明我们服务端已经没有什么问题了。
5、然后我们再单独创建一个Webapi项目来实现调用IdentityServer端获取token实现资源的正常访问.首先设置启动地址:
6、设置API控制器授权特性:
7、设置启动配置选项:
8.我们先在Postman中用一个错误的token去访问,结果提示未授权。
9、通过访问IdentityServer提供的endpoint(步骤4图中有标记)地址来获取token,如下图:
10.通过获取的token,去访问被限制的资源(即步骤6图中标识的位置),返回成功,即访问成功:
附上通过第三方程序来调用token,然后携带token访问API的demo:
using System;
using System.Net.Http;
using IdentityModel.Client;
namespace identityServerClient
{
class Program
{
static void Main(string[] args)
{
var discoveryClient=DiscoveryClient.GetAsync("http://localhost:5000").Result;
if(discoveryClient.IsError)
{
Console.WriteLine("there are some errors");
}
var tokenClient=new TokenClient(discoveryClient.TokenEndpoint,"client","secret");
var tokenResponse=tokenClient.RequestClientCredentialsAsync("api").Result;
if(tokenResponse.IsError)
{
Console.WriteLine(tokenResponse.Error);
}
else
{
Console.WriteLine(tokenResponse.Json);
}
var httpClient=new HttpClient();
httpClient.SetBearerToken(tokenResponse.AccessToken);
var response=httpClient.GetAsync("http://localhost:5001/api/values").Result;
if(response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
Console.ReadLine(); Console.WriteLine("Hello World!");
}
}
}
使用IdentityServer4实现一个简单的Oauth2客户端模式授权的更多相关文章
- struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb
在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...
- 构建一个简单的基于MVC模式的JavaWeb
零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_09-SpringSecurityOauth2研究-Oauth2密码模式授权
密码模式(Resource Owner Password Credentials)与授权码模式的区别是申请令牌不再使用授权码,而是直接 通过用户名和密码即可申请令牌. 测试如下: Post请求:htt ...
- 用Nodejs 实现一个简单的 Redis客户端
目录 0. 写在前面 1. 背景映入 2. 数据库选择 3. Nodejs TCP连接 3. 代码编写 4. 实验 5. wireshark 抓包分析 6. 杂与代码 0. 写在前面 大家如果有去看过 ...
- Python3实现一个简单的tcp客户端,用于测试服务端端口开放情况
需要Python的socket模块儿,windows使用netstat -an查看端口状态,Linux使用netstat -tunlp查看端口状态. # client 客户端 # TCP必须建立连接 ...
- 一个简单的SNTP客户端
借鉴于python网络编程攻略 #/usr/local/bin/python3.5 #coding:utf-8 import socket, struct, time NTP_server = &qu ...
- IdentityServer4实现OAuth2.0四种模式之客户端模式
一,准备内容 IdentityServer4 是Asp.net core的一个中间件,用于添加符合OpenId Connect和OAuth2.0规范的终端到Asp.net Core应用.在这里简单介绍 ...
- 入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 创建简单的OAuth2.0服务器,客户端和API(三)
本教程的目的在于创造尽可能简单的identityserver安装作为一个oauth2授权服务器.这应该能够让你了解一些基本功能和配置选项(完整的源代码可以发现在这里).在后面的文档中会介绍更多的高级功 ...
- Spring Security OAuth2 Demo —— 客户端模式(ClientCredentials)
前情回顾 前几节分享了OAuth2的流程与其它三种授权模式,这几种授权模式复杂程度由大至小:授权码模式 > 隐式授权模式 > 密码模式 > 客户端模式 本文要讲的是最后一种也是最简单 ...
随机推荐
- Spark内存分配诊断
1.JVM自带众多内存诊断的工具,例如:JMap,JConsole等,第三方IBM JVM Profile Tools等. 2.日志!在开发.测试.生产环境中最合适的就是日志,特别是Driver产生的 ...
- NFS常见问题
问题一:取消挂载失败 问题现象: umount /opt/data umount.nfs: /opt/data: device is busy umount.nfs: /opt/data: devic ...
- apache 访问权限出错,apache selinux 权限问题, (13) Permission Denied
今天在使用 httpd 做文件服务器的时候,发现 png 图像没有打开,但是原本www/html 文件夹内部的文件就可以打开.后来猜测是selinux 的问题,之前一直想写一篇关于selinux 的博 ...
- Git命令实现本地文件推送到git仓库
前提: ①确定本机(windows环境)已经安装git(https://git-scm.com/downloads) ②建立好远程Git仓库 1.在你想推送的文件夹下:右键→选择Git Bath ...
- 【PAT】B1081 检查密码(15 分)
水题 #include<cstdio> #include<string.h> #include<ctype.h> #include<algorithm> ...
- Logstash收集nginx访问日志和错误日志
1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...
- span 文本内容超过宽度自动换行
span{word-break:normal; width:auto; display:block; white-space:pre-wrap;word-wrap : break-word ;over ...
- WPFの获取任意元素的位置
如果布局在Grid中: 方法一: //_stackPanel为子元素,_grid为父元素 Point point = _stackPanel.TranslatePoint(new Point(0, 0 ...
- C#事件の事件处解
C# 事件(Event) 事件(Event) 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或者是一些出现,如系统生成的通知.应用程序需要在事件发生时响应事件.例如,中断.事件是用于进程间通信. ...
- C#异步编程のawait和async关键字来写异步程序
一.await和async关键字 .Net平台不断推出了新的异步编程模型,在.net4.5中加入了关键字await和async,顾名思义,await是指方法执行可等待,即可挂起直到有结果(不是必须立即 ...