IdentityServer4 Hybrid 模式
原文参考:Switching to Hybrid Flow and adding API Access back
接上篇:IdentityServer-Protecting an API using Client Credentials
首先配置OpenID:
原文参考:Adding User Authentication with OpenID Connect
下载相关UI:Quickstart UI repo
下载下来后主要有3个文件夹

需要把前面两个文件夹的部分内容复制到项目中
Quickstart目录中复制如下内容

Views目录中复制如下内容

Shared目录中只需要复制一个文件

复制完成后将上面的类除Controller外统一修改命名空间:【项目名称】.Models
Controller类修改命名空间:【项目名称】.Controllers
目的是在Views中不需要在引入命名空间,因为原来的Views\_ViewImports.cshtml 中有引用

接下来配置Client进行测试

在postman中测试Hybrid模式需要注意加上scope,否则会报错


在配置Client的时候可以设置是否启用提示页:
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
RequireConsent = false,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true
}
RequireConsent=false表示不显示提示直接授权通过。
代码地址:IdentityCenter
将IdentityCenter和API放在同一个项目中,修改startup
services.AddAuthentication()
.AddJwtBearer(jwt =>
{
jwt.Authority = "http://localhost:5000";
jwt.RequireHttpsMetadata = false;
jwt.Audience = "api1";
});
新建一个测试Controller
namespace IdentityCenter.API
{
[Produces("application/json")]
[Route("api/Identity")]
//[Authorize]
public class IdentityController : Controller
{
// GET: api/Identity
[HttpGet]
[Authorize(AuthenticationSchemes = "Bearer")]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new { c.Type, c.Value });
}
// GET: api/Identity/5
[HttpGet("{id}", Name = "Get")]
public string Get(int id)
{
return "value";
}
}
}
这里要指定[Authorize(AuthenticationSchemes = "Bearer")]
而不能仅仅使用[Authorize]
当然,如果把startup中的代码改下
services.AddAuthentication("Bearer")
那么可以直接使用[Authorize]
这样就可以使用token访问此API
还有一点要注意的是如果把认证中心部署在另外一台机器上,比如放在CentOS中
那么jwt.Authority = "http://10.202.203.29:5000"; 这里一定要使用具体的IP地址,否则会出现可以获取token,但无法通过授权
这里在https://identityserver4.readthedocs.io/en/release/endpoints/discovery.html 有说明
IdentityServer4 Hybrid 模式的更多相关文章
- 浅析hybrid模式下地支付宝钱包和微信
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VuY2hhbzEyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- IdentityServer4授权模式应用场景
OpenID 和 OAuth 的区别 IdentityServer4,NET Core下的安全框架 客户端模式(Client Credentials) 密码模式(resource owner pass ...
- IdentityServer4 密码模式认证
授权服务器设置 添加用户 添加测试用户,也可以从数据库查 public static List<TestUser> GetTestUser() { return new List< ...
- IdentityServer4 密码模式实现
1. 修改 Config.cs using System.Collections; using System.Collections.Generic; using IdentityServer4.M ...
- IdentityServer4密码模式接入现有用户数据表
具体接入identityserver请看文档,这里只简单列举部分步骤 1.创建一个web项目,引入Identityserver4的nuget包 2.新建一个类,实现IResourceOwnerPass ...
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...
- 有关 Hybrid 开发模式实践总结
前言 随着公司业务不断发展,移动开发项目越来越多,项目任务时间紧,我们内部开发流程是以项目为导向,有别于一般公司对产品不断迭代的做法,但移动端开发人员资源有限,需要在不同项目之间做业务场景切换开发,就 ...
- Hybrid App—Hybrid App开发模式介绍和各种开发模式对比
什么是Hybrid App 最开的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是"Hybrid模式".Hybrid APP ...
- Hybrid App 开发模式
开发移动App主要有三种模式:Native. Hybrid 和 Web App. 需要注意的一点是在选择开发模式的时候,要根据你的项目类型(图片类?视频类?新闻类?等),产品业务和人员技术储备等做权衡 ...
随机推荐
- [转]MySQL源码:Range和Ref优化的成本评估
MySQL源码:Range和Ref优化的成本评估 原文链接:http://www.orczhou.com/index.php/2012/12/mysql-source-code-optimizer-r ...
- 【转】Javascript基本类型和引用类型的区别
根据[转贴]进一步补充 今天明白了一个困扰很久的问题:引用类型和基本类型的区别与联系要明白这个问题,首先需要理解堆栈的概念.那什么又是堆栈,有什么区别和联系呢?堆:首先堆是动态分配的,JVM并不会自动 ...
- 顺序表[A+B->A]
题目:表A 1 3 5,表B 2 4 6,都呈非递减排序,现将两个表合并成一个表,也呈非递减排序,存放在A中(或者B中),言外之意是不能开辟新表!拿出B中数据,沿着A的后面一直往前比较,如果小于就 ...
- 20169207 《Linux内核原理与分析》第十一周作业
阅读学习教材「Linux内核设计与实现 (Linux Kernel Development)」第教材第17,19,20章. 在第17章设备与模块章节,关于设备驱动和设备管理,我们讨论四中内核成分. 1 ...
- 线段树区间覆盖 蛤玮打扫教室(zzuli 1877)
http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1877 Description 现在知道一共有n个机房,算上蛤玮一共有m个队员,教练做了m个签,每 ...
- noip第12课资料
- ASP.NET Web API 框架研究 Action的选择
如何从HttpController众多方法里如何选择出有效的Action方法?主要分一下几个步骤: 首先,获取候选HttpActionDescriptor列表(ILookup(string,HttpA ...
- DB2 Sql性能查看与优化
1.执行次数最多的TOP10SQL"db2 "select * from sysibmadm.snapdyn_sql order by NUM_EXECUTIONS desc fe ...
- IIS日志存入数据库之二:ETW
在上一篇文章<IIS日志存入数据库之一:ODBC>中,我提到了ODBC方式保存的缺点,即:无法保存响应时间以及接收和响应的字节数. 如果一定要获取响应时间以及接收和响应的字节数的话,就要另 ...
- WPF 右上角带数字的按钮
效果如图所示 三种方案, 1:不改控件模版,布局实现,死开 2:改button模版,利用附加属性,附加附加属性,功能多了话,不利于拓展 3:继承button,添加依赖属性,接下来是这种 1:新建类 为 ...