Grant Types 授权类型

授权类型指出了一个客户端如何与IdentityServer进行交互。OpenID Conect和OAuth2.0定义了如下的授权类型:

  • Implicit
  • Authorization code
  • Hybrid
  • Client credentials
  • Resource owner password
  • Refresh tokens
  • Extension grants

你可以在Client的配置中用AllowedGrantTypes 来指定授权类型。

一个客户端可以指定不止一种授权类型(比如Hybrid用于以用户为中心的交互,client_credential用于服务端对服务端的交互),GrantTypes类里面有一些特有的授权类型:

Client.AllowedGrantTypes = GrantTypes.HybridAndClientCredentials;

你也可以指定一个授权类型的列表:

Client.AllowedGrantTypes =
{
GrantType.Hybrid,
GrantType.ClientCredentials,
"my_custom_grant_type"
};

如果想要通过浏览器通道传输access token,你需要显式的允许客户端做如下配置:

Client.AllowAccessTokensViaBrowser = true;

注意:处于安全的因素,不是所有的类型的组合(例如上面的那个列表)被允许的,具体看下面的解释。

本文余下部分将简要描述授权类型,以及何时使用它们。此外,还建议阅读相应的规范,以便更好地理解其中的差异。

Client credentials

对于服务和服务之间的通讯来说Client credentials是最简单的一种使用场景。这种情况下请求token的是客户端,而不是用户。

这种情况下向令牌端点(token endpoint)发送了一个令牌请求,并获得代表客户端的访问令牌。客户端通常需要使用其client id和secret对令牌端点进行身份验证。

点击 Client Credentials Quick Start 查看demo。

Resource owner password

这种授权类型允许一个客户端代表用户向令牌端点(token endpoint)发送一个用户名和密码。这是所谓的“非交互”认证,并且通常情况下也是不推荐的。

它存在的一些理由包括一些遗留代码中或者一些集成的场景中,在这种情况下,这种授予类型是有用的,但是一般的建议是使用隐式或混合的交互流来代替用户身份验证。

查看这里可以参考一些关于这方面的参考,通过实现IResourceOwnerPasswordValidator 这个接口,你可以提供一些校验username/password的代码。

Implicit

隐式的授权类型对基于浏览器的应用进行了优化,用于用户身份验证(包括服务器端和JavaScript应用程序),或身份验证和访问令牌请求(JavaScript应用程序)。

在隐式流中,所有令牌都通过浏览器传输,因此不允许刷新令牌等高级功能。

This demo演示了诸如MVC这种应用的认证过程, this demo演示了一些JavaScript应用的认证过程。

Authorization code

授权代码流最初是由OAuth 2指定的,它提供了一种方法,可以在反向通道上检索令牌,而不是使用浏览器的前端通道(front-channel)。它还支持客户端身份验证。

虽然这种授权类型本身是受支持的,但通常建议将其与身份令牌组合在一起,从而将其转换为所谓的混合流。混合流为你提供了重要的额外特性,如签名协议响应(signed protocol responses)。

Hybrid

Hybrid是implicit和authorization code的混合。它使用多种授权类型的组合,最典型的是 code id_token.

在混合流中,身份令牌通过浏览器通道传输,并包含签名的协议响应以及其他工件(artifacts)的签名,如授权码。这减少了许多应用于浏览器通道的攻击。在成功验证响应之后,反向通道(back-channel)用于检索access token和refresh token(刷新令牌)。

如果本地应用想要检索access token(可能还会有refresh token刷新令牌)的话,那么这种流程就特别合适。另外,他还用户像MVC应用和桌面应用。

查看 this 来获取MVC应用使用这种流程的相关信息。

Refresh tokens

刷新令牌允许对api的长期访问。

您通常希望尽可能短地保留访问令牌的生命周期,但同时又不想一次又一次地打扰用户(进行认证),因为他们会进行前端通道往返来请求一个新的token。

刷新令牌允许在没有用户交互的情况下请求到一个新的access token。每次客户端刷新一个令牌时,它都需要对identityserver进行一个(经过身份验证的)反向通道调用。这允许核查刷新令牌是否仍然有效,或者在此期间被撤销。

刷新令牌适用于hybrid、authentication code和resourceownerpassword这些流程中。为了请求一个刷新令牌,客户端需要在请求中包含一个offline_access的scope(并且这个scope必须通过认证)

Extension grants

授权扩展允许使用新的授权类型来扩展token endpoint,查看这里 this 取得更多的信息。

Incompatible grant types 不能组合在一起的授权类型

一些授权类型的组合是错误的或者禁止的。

  • 将implicit和authorization code或者hybrid组合在一起会造成从更安全的基于authorization code流程模式降级到implicit流模式。
  • 同样的问题也存在于authorization code和hybrid混合使用

IdentityServer4【Topic】之授权类型的更多相关文章

  1. IdentityServer4支持的授权类型以及组合

    支持的授权类型: implicit hybrid authorization_code client_credentials password 支持的组合: implicit implicit,cli ...

  2. IdentityServer4授权类型(GrantType)对应的返回类型(ResponseType)

    授权类型(GrantyType) 返回类型(ResponseType) authorization_code code implicit token implicit id_token implici ...

  3. oauth2-server-php-docs 授权类型

    授权码 概观 在Authorization Code交付式时使用的客户端想要请求访问受保护资源代表其他用户(即第三方).这是最常与OAuth关联的授予类型. 详细了解授权码 用例 代表第三方来电 履行 ...

  4. IdentityServer4 (1) 客户端授权模式(Client Credentials)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  5. IdentityServer4 (2) 密码授权(Resource Owner Password)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  6. IdentityServer4 指定角色授权(Authorize(Roles="admin"))

    1. 业务场景 IdentityServer4 授权配置Client中的AllowedScopes,设置的是具体的 API 站点名字,也就是使用方设置的ApiName,示例代码: //授权中心配置 n ...

  7. 关于Identityserver4和IdentityServer3 授权不兼容的问题

    使用IdentityServer3 作为授权服务器,如果没有设置证书,而且client又没有设置AccessTokenType = AccessTokenType.Reference,则获取token ...

  8. .net core gRPC与IdentityServer4集成认证授权

    前言 随着.net core3.0的正式发布,gRPC服务被集成到了VS2019.本文主要演示如何对gRPC的服务进行认证授权. 分析 目前.net core使用最广的认证授权组件是基于OAuth2. ...

  9. IdentityServer4身份认证授权入门

    一.简介 IdentityServer4 是为ASP.NET Core 系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架 特点: 1.认证服务 2.单点登录登出( ...

随机推荐

  1. IDEA用maven创建springMVC项目和配置(XML配置和Java配置)

    1.DEA创建项目 新建一个maven project,并且选择webapp原型. 然后点击next 这里的GroupId和ArtifactID随意填写,但是ArtifactID最好和你的项目一名一样 ...

  2. BSOJ 5603 -- 【SNOI2017】炸弹

    题好数据水系列,网上的十几行神仙解法A了原数据. 这道题要用到线段数优化建图的知识.然而考试考到这道题时我还不会. 我们设分别表示每个炸弹向左和向右最远能炸到哪个炸弹.很容易想到一个思路,就是每个炸弹 ...

  3. Springboot监控之一:SpringBoot四大神器之Actuator

    介绍 Spring Boot有四大神器,分别是auto-configuration.starters.cli.actuator,本文主要讲actuator.actuator是spring boot提供 ...

  4. 如何征服面试官,拿到Offer [转]

    转自 https://my.oschina.net/cccyb/blog/3012768 又到了茶余饭后的时间,想想写点什么,掐指一算,噢呦,快到3月份了,职场的金三银四跳槽季又来了,不同的是今年比往 ...

  5. 转://WITH AS and materialize hints

    WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...

  6. Spring batch

    学习了解 https://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/index.html?ca=drs-#ibm-pcon

  7. P1553 数字反转(升级版)(模拟)

    花了2个小时,写的..mmp只想说,还是我太菜了. #include<iostream> #include<cstring> using namespace std; ]; i ...

  8. 屏蔽右键+f12

    function disableInfo() { document.onkeydown = function() { var e = window.event || arguments[0]; //屏 ...

  9. Bean named '*' must be of type [*], but was actually of type []

    本地Service 名字和调用别的maven项目Service重名

  10. 如果redis没有设置expire,他是否默认永不过期?

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/soulmate_P/article/details/81136054如果没有设置有效期,即使内存用完 ...