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. 需要注意的一点是在选择开发模式的时候,要根据你的项目类型(图片类?视频类?新闻类?等),产品业务和人员技术储备等做权衡 ...
随机推荐
- arguments[0]()的详解
var length = 10; function fn(){ console.log(this.length); } var obj = { length:5, method:function(fn ...
- 整合Spring+Struts2+Mybatis加spring单元测试等
前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...
- Silverlight样式定义
方法一.定义在控件内部 <Canvas Background="Red" Height="100" HorizontalAlignment="L ...
- 查看Redis集群所有节点内存工具
指定集群中任意一个节点,查看集群中所有节点当前已用物理内存.配置的最大物理内存和系统物理内存. 源码(可从https://github.com/eyjian/redis-tools下载): #! ...
- window下切换python
自己的win10装了2.7和3.6版本的python.本不想装2.7的,但node.js的C++的编译居然用到2.X的python,没法子就装了2.7.那怎么切换呢? 为了方便使用,我在系统的path ...
- 记录:CSS选择器学习
常用选择器:标签选择器.类选择器.ID选择器 子选择器(Child selectors) 还有一个比较有用的选择器子选择器,即大于符号(>),用于选择指定标签元素的第一代子元素. .con> ...
- 一份不太简短的LaTeX模板
编译环境: Ubuntu16.04 texllive2016 sublime text3 + latextools 该模板使用与自己写文档,记笔记,记录代码,写作业等等. %!TEX program ...
- POJ3692 Kindergarten
Kindergarten Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6882 Accepted: 3402 Desc ...
- 如何永久关闭选项"Tools > Close Other Forms"
http://www.cnblogs.com/quanweiru/archive/2013/03/30/2990945.html Oracle EBS里Tools>Close Other For ...
- PL/SQL客户端连Oracle很快就断开问题的解决
PL/SQL登录很短时间session就自动断开 1.首先查看你这个用户的profile文件 select profile from dba_users where username='USERNAM ...