.Net Core WebApi(三)--使用 IdentityServer4 4.1.1 踩坑记录
目的:创建IdentityServer 并通过PostMan验证获取token
第一次配置如下
public class Config
{
public static IEnumerable<ApiResource> GetResource()
{
return new List<ApiResource>
{ new ApiResource("api","My Api") };
}
public static IEnumerable<Client> GetClients()
{
return new List<Client> { new Client()
{
ClientId="client",
AllowedGrantTypes=GrantTypes.ClientCredentials,
ClientSecrets={ new Secret("secret".Sha256())},
AllowedScopes={"api"}
} };
}
}
PostMan的请求如图
结果显示 请求无效 参照教程 >https://www.cnblogs.com/monster17/p/13261647.html 得知是因为传参格式的问题
- 1.我们将Body改为
格式 - 2.加参数<AllowedScopes: api> 【指定的api为配置Config中apiresource的名称】 再次请求
如图

结果又显示scope无效 【这里懵逼了很久 明明Config中apiResource的name 和client中AllowedScopes的接口是一致的】
但是参照报错 一定是scop的问题 于是去找了一下官方文档关于API Resources 的使用
参照原文


这里也便可以理解 问题所在了。 apiResource并不等同于scope 它相当于是scopes集合的统称 实现了scope的分组【但具体的scope还是要进行设置的 我们先前的Config 缺少具体scope =。= 真是令人头大】
先参照例子理解一下
//创建多个scope
{
return new List<ApiScope>
{
// invoice API specific scopes
new ApiScope(name: "invoice.read", displayName: "Reads your invoices."),
new ApiScope(name: "invoice.pay", displayName: "Pays your invoices."),
// customer API specific scopes
new ApiScope(name: "customer.read", displayName: "Reads you customers information."),
new ApiScope(name: "customer.contact", displayName: "Allows contacting one of your customers."),
// shared scope
new ApiScope(name: "manage", displayName: "Provides administrative access to invoice and customer data.")
};
}
//调取时 将多个scope的Name加参时 可能会很长很长 为了方便 我们将scope 进行分组 后期可直接调用**统称** 这里分成两组
public static readonly IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("invoice", "Invoice API")//设置每组scopes的统称
{
Scopes = { "invoice.read", "invoice.pay", "manage" }//设置每组scope具体名称
},
new ApiResource("customer", "Customer API")
{
Scopes = { "customer.read", "customer.contact", "manage" }
}
};
}
再来回头看看我们的Config 修改如下
public class Config
{
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>() {
new ApiResource("api", "My api") { Scopes={"api1","api2"} //将具体的scopes 归为一组 统称为api
} };
}
//创建具体的scope
public static IEnumerable<ApiScope> GetApiScopes()
{
return new List<ApiScope> {
new ApiScope("api1","My first api"),
new ApiScope("api2","My second api")};
}
public static IEnumerable<Client> GetClients()
{
return new List<Client>() { new Client {
ClientId="client",
AllowedGrantTypes=GrantTypes.ClientCredentials,
ClientSecrets={new Secret("secret".Sha256()) },
AllowedScopes={ "api1","api2"}//此处一定要配置具体的scope名称 外部调用可直接配置为 api【统称】
} };
}
用PostMan验证一下

成功了 emmmm 又是美好的一天【还是要多读源文档e =.=】
补充 获取Refresh_token
GetClients配置修改如下

结果

.Net Core WebApi(三)--使用 IdentityServer4 4.1.1 踩坑记录的更多相关文章
- ASP.Net Core Web Api 使用 IdentityServer4 最新版 踩坑记录
辅助工具 日志追踪包 : Serilog.AspNetCore 源码查看工具 : ILSpy 项目环境 ###: ASP.NetCore 3.1 IdentityServer4 4.0.0+ 主题内容 ...
- .net core建站踩坑记录
系统:win10 VS版本:2017 .NET Core 版本: 1.1 零.读取配置文件 参考:http://www.tuicool.com/articles/QfYVBvi 此版本无需添加其他组件 ...
- Asp.Net Core Identity+EFCore + Mysql踩坑记录
搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...
- .NET CORE 2.0 踩坑记录之ConfigurationManager
在之前.net framework 中使用的ConfigurationManager还是很方便的,不过在.NET CORE 2.0中SDK默认已经不存在ConfigurationManager. 那么 ...
- 关于.net core 在docker中监听地址设置踩坑记
1.今天在做docker容器的时候发现如果将.net core 内部监听地址设置为localhost:8888. 2.在docker build -p 6444:8888 运行容器后,外部通过6444 ...
- .net Core发布至IIS完全手册带各种踩坑
服务器环境配置 和各位大爷报告一下我的服务器环境 : Windows Server 2012 iis 8 小插曲开始: 运维大哥在昨天给了我一台新的server 0环境开始搭建 . 并且没有安装任何的 ...
- Kubernetes-Service介绍(三)-Ingress(含最新版安装踩坑实践)
前言 本篇是Kubernetes第十篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kuberne ...
- 在 ASP.NET Core 中使用 MySql 踩坑记录
使用 Pomelo.EntityFrameworkCore.MySql 生成 MySQL 数据库 关于如何使用请查看项目文档即可 组件地址:https://github.com/PomeloFound ...
- net core 踩坑记录
静态文件要放到wwwroot目录中才能访问 linux服务器部署运行报错 System.Net.Http.HttpRequestException: The SSL connection could ...
随机推荐
- lucene Hello World
一个lucene创建索引和查找索引的样例: 创建索引: public class Indexer { private IndexWriter indexWriter; /** * 构造器实例化inde ...
- 【动态规划】石子合并 luogu-1880
分析 简单的区间DP AC代码 #include <bits/stdc++.h> using namespace std; #define ms(a,b) memset(a,b,sizeo ...
- java开源项目学习
http://jeecg-boot.mydoc.io/ 在线文档已切换至新地址: http://doc.jeecg.com Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平 ...
- 纯C语言(C89)实现动态数组
起因 工作很少接触纯C项目,业余写着玩玩,不断雕琢 目标 纯C实现动态数组,提供方便易用泛型接口,避免依赖 实现 完全封装,隐藏结构体细节,不支持栈创建 拷贝存储,轻微性能代价换来易用性 vector ...
- Python -- raw_input函数
使用raw_input函数,它会把所有的输入当作原始数据(raw data),然后将其放入字符串中: >>> input("Enter a number: ") ...
- 在 CentOS 7.5 64位上使用 yum 安装 MySQL 8.0
前段时间在 CentOS 7.5 64位上安装 MySQL 8.0.查了些资料,在这里记录一下详细的安装和设置步骤. 一.安装 使用yum安装MySQL之前需要先下载对应的.rpm文件,下载方法: 去 ...
- Java中9种常见的CMS GC问题分析与解决
1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...
- 线性反馈移位寄存器(LFSR)
LFSR用于产生可重复的伪随机序列PRBS,该电路有n级触发器和一些异或门组成,如下图所示. 其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路:这里的反 ...
- 浅谈Java类中的变量初始化顺序
一.变量与构造器的初始化顺序 我们知道一个类中具有类变量.类方法和构造器(方法中的局部变量不讨论,他们是在方法调用时才被初始化),当我们初始化创建一个类对象时,其初始化的顺序为:先初始化类变量,再执行 ...
- python ui自动化之多窗口切换
wd.current_window_handle #获取当前窗口句柄 wd.window_handles #获取所有窗口句柄 wd.switch_to.window(wd.window_handles ...
