一、发现端点

二、授权端点

三、令牌端点

四、UserInfo端点

五、Introspection端点

六、撤销端点

七、结束会话端点

一、发现端点

发现端点可用于检索有关IdentityServer的元数据 - 它返回诸如颁发者名称,密钥材料,支持的范围等信息。

发现端点可通过/.well-known/openid-configuration相对于基地址获得,例如:

https://demo.identityserver.io/.well-known/openid-configuration

IdentityModel

您可以使用IdentityModel库以编程方式访问发现端点:

var discoveryClient = new DiscoveryClient("https://demo.identityserver.io");
var doc = await discoveryClient.GetAsync(); var tokenEndpoint = doc.TokenEndpoint;
var keys = doc.KeySet.Keys;

出于安全原因,DiscoveryClient具有可配置的验证策略,默认情况下会检查以下规则:

  • HTTPS必须用于发现端点和所有协议端点
  • 发布者名称应该与下载文档时指定的权限相匹配(这实际上是发现规范中必须的)
  • 协议端点应该位于权限之下——而不是在不同的服务器或URL上(这对于多租户操作来说可能特别有趣)
  • 必须指定密钥集

如果由于某种原因(例如开发环境)您需要放松设置,您可以使用以下代码:

var client = new DiscoveryClient("http://dev.identityserver.internal");
client.Policy.RequireHttps = false; var disco = await client.GetAsync();

顺便说一句 - 你总是可以通过HTTP连接到localhost和127.0.0.1(但这也是可配置的)。

二、授权端点

授权端点可用于通过浏览器请求令牌或授权码。 此过程通常涉及最终用户的身份验证和可选的同意。

client_id

客户的标识符(必填)。

scope 

一个或多个注册范围(必填)

redirect_uri

必须与该客户端允许的重定向URI之一完全匹配(必需)

response_type

  id_token  请求身份令牌(仅允许身份范围)

  token  请求访问令牌(仅允许资源范围)

  id_token token  请求身份令牌和访问令牌

  code 请求授权码

  code id_token  请求授权代码和身份令牌

  code id_token token  请求授权代码,身份令牌和访问令牌  

response_mode

  form_post  将令牌响应作为表单发送而不是片段编码重定向(可选)

state

identityserver将回显令牌响应的状态值,这是客户端和提供者之间的往返状态,关联请求和响应以及CSRF /重放保护。 (推荐的)

nonce

identityserver将回显身份令牌中的nonce值,这是为了重放保护)

通过隐式授权对身份令牌是必需的。

prompt     

   none  请求期间不会显示任何UI。 如果无法做到这一点(例如,因为用户必须登录或同意),则会返回错误

    login  即使用户已登录并具有有效会话,也会显示登录UI

code_challenge 

发送PKCE的代码质询

code_challenge_method

plain plain表示使用纯文本 S256 S256表示使用SHA256进行哈希处理

login_hint

可用于预先填写登录页面上的用户名字段

ui_locales

提供有关登录UI所需显示语言的提示

max_age

如果用户的登录会话超过最大时间(以秒为单位),将显示登录UI

acr_values

允许传递额外的身份验证相关信息 - 身份服务器特殊情况下面的私有acr_values:

idp:name_of_idp  绕过login / home领域屏幕并将用户直接转发到选定的身份提供者(如果允许每个客户端配置)

tenant:name_of_tenant  可用于将租户名称传递给登录UI

案例:

GET /connect/authorize?
client_id=client1&
scope=openid email api1&
response_type=id_token token&
redirect_uri=https://myapp/callback&
state=abc&
nonce=xyz

(删除了URL编码,并添加了换行符以提高可读性)

IdentityModel

您可以使用IdentityModel库以编程方式为授权端点创建URL:

var request = new RequestUrl(doc.AuthorizeEndpoint);
var url = request.CreateAuthorizeUrl(
clientId: "client",
responseType: OidcConstants.ResponseTypes.CodeIdToken,
responseMode: OidcConstants.ResponseModes.FormPost,
redirectUri: "https://myapp.com/callback",
state: CryptoRandom.CreateUniqueId(),
nonce: CryptoRandom.CreateUniqueId());

..并解析响应:

var response = new AuthorizeResponse(callbackUrl);

var accessToken = response.AccessToken;
var idToken = response.IdentityToken;
var state = response.State;

三、令牌端点

令牌端点可用于以编程方式请求令牌。 它支持password,authorization_code,client_credentials和refresh_token grant types。 此外,可以扩展令牌端点以支持扩展授权类型。

client_id

客户标识符(必填)

client_secret

客户端密钥要么在post主体中,要么作为基本的身份验证头。

grant_type

  authorization_codeclient_credentialspasswordrefresh_token or 自定义

scope

一个或多个注册范围。如果没有指定,将发出所有显式允许作用域的令牌。

redirect_uri

authorization_code授权类型所必需的

code

授权码(authorization_code授权类型所需)

code_verifier

PKCE证明密钥

username

资源所有者用户名(密码授权类型所需)

password

资源所有者密码(密码授权类型所需)

acr_values

允许传递密码授予类型的其他身份验证相关信息 - identityserver特殊情况下面的专有acr_values:

idp:name_of_idp 绕过login / home领域屏幕并将用户直接转发到选定的身份提供者(如果允许每个客户端配置)

tenant:name_of_tenant 可用于将租户名称传递给令牌端点

refresh_token

刷新令牌(refresh_token授权类型所需)

案例

POST /connect/token

    client_id=client1&
client_secret=secret&
grant_type=authorization_code&
code=hdh922&
redirect_uri=https://myapp.com/callback

(为了便于阅读,删除了表格编码并添加了换行符)

IdentityModel

您可以使用IdentityModel库以编程方式访问令牌端点:

var client = new TokenClient(
doc.TokenEndpoint,
"client_id",
"secret"); var response = await client.RequestAuthorizationCodeAsync("hdh922", "https://myapp.com/callback");
var token = response.AccessToken;

四、UserInfo端点

UserInfo端点可用于检索有关用户的身份信息(请参阅规范)。

调用者需要发送代表用户的有效访问令牌。 根据授予的范围,UserInfo端点将返回映射的声明(至少需要openid作用域)。

案例

GET /connect/userinfo
Authorization: Bearer <access_token>
HTTP/1.1  OK
Content-Type: application/json {
"sub": "",
"name": "Bob Smith",
"given_name": "Bob",
"family_name": "Smith",
"role": [
"user",
"admin"
]
}

IdentityModel

您可以使用IdentityModel库以编程方式访问userinfo端点:

var userInfoClient = new UserInfoClient(doc.UserInfoEndpoint, token);

var response = await userInfoClient.GetAsync();
var claims = response.Claims;

五、Introspection端点

内省端点是RFC 7662的实现。

它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT)。 内省端点需要使用范围密钥进行身份验证。

案例

POST /connect/introspect
Authorization: Basic xxxyyy token=<token>

成功的响应将返回状态代码200以及活动或非活动令牌:

{
"active": true,
"sub": ""
}

未知或过期的令牌将被标记为无效:

{
"active": false,
}

无效请求将返回400,未授权请求401。

IdentityModel

您可以使用IdentityModel库以编程方式访问内省端点:

var introspectionClient = new IntrospectionClient(
doc.IntrospectionEndpoint,
"api_name",
"api_secret"); var response = await introspectionClient.SendAsync(
new IntrospectionRequest { Token = token }); var isActive = response.IsActive;
var claims = response.Claims;

六、撤销端点

此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌。 它实现了令牌撤销规范(RFC 7009)。

token

要撤销的令牌(必填)

token_type_hint

access_token或refresh_token(可选)

案例

POST /connect/revocation HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token

IdentityModel

您可以使用IdentityModel库以编程方式撤消令牌:

var revocationClient = new TokenRevocationClient(
RevocationEndpoint,
"client",
"secret"); var response = await revocationClient.RevokeAccessTokenAsync(token);

七、结束会话端点

结束会话端点可用于触发单点注销(请参阅规范)。

要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL。 用户在会话期间通过浏览器登录的所有应用程序都可以参与注销。

Parameters

id_token_hint

当用户被重定向到端点时,系统会提示他们是否真的想要注销。 发送从身份验证收到的原始id_token的客户端可以绕过此提示。 它作为名为id_token_hint的查询字符串参数传递。

post_logout_redirect_uri

如果传递了有效的id_token_hint,则客户端也可以发送post_logout_redirect_uriparameter。 这可用于允许用户在注销后重定向回客户端。 该值必须与客户端预先配置的PostLogoutRedirectUris(客户端文档)之一匹配。

state

如果传递了有效的post_logout_redirect_uri,则客户端也可以发送状态参数。 在用户重定向回客户端后,这将作为查询字符串参数返回给客户端。 这通常由客户端用于跨重定向的往返状态。

案例

GET /connect/endsession?id_token_hint=eyJhbGciOiJSUzI1NiIsImtpZCI6IjdlOGFkZmMzMjU1OTEyNzI0ZDY4NWZmYmIwOThjNDEyIiwidHlwIjoiSldUIn0.eyJuYmYiOjE0OTE3NjUzMjEsImV4cCI6MTQ5MTc2NTYyMSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoianNfb2lkYyIsIm5vbmNlIjoiYTQwNGFjN2NjYWEwNGFmNzkzNmJjYTkyNTJkYTRhODUiLCJpYXQiOjE0OTE3NjUzMjEsInNpZCI6IjI2YTYzNWVmOTQ2ZjRiZGU3ZWUzMzQ2ZjFmMWY1NTZjIiwic3ViIjoiODg0MjExMTMiLCJhdXRoX3RpbWUiOjE0OTE3NjUzMTksImlkcCI6ImxvY2FsIiwiYW1yIjpbInB3ZCJdfQ.STzOWoeVYMtZdRAeRT95cMYEmClixWkmGwVH2Yyiks9BETotbSZiSfgE5kRh72kghN78N3-RgCTUmM2edB3bZx4H5ut3wWsBnZtQ2JLfhTwJAjaLE9Ykt68ovNJySbm8hjZhHzPWKh55jzshivQvTX0GdtlbcDoEA1oNONxHkpDIcr3pRoGi6YveEAFsGOeSQwzT76aId-rAALhFPkyKnVc-uB8IHtGNSyRWLFhwVqAdS3fRNO7iIs5hYRxeFSU7a5ZuUqZ6RRi-bcDhI-djKO5uAwiyhfpbpYcaY_TxXWoCmq8N8uAw9zqFsQUwcXymfOAi2UF3eFZt02hBu-shKA&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A7017%2Findex.html
Next Previous

IdentityServer4-端点的更多相关文章

  1. .NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据

    内容:本文带大家使用IdentityServer4进行对API授权保护的基本策略 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 本文将要讲述如何使用IdentityServer4 ...

  2. IdentityServer4之Resource Owner Password Credentials(资源拥有者密码凭据许可)

    IdentityServer4之Resource Owner Password Credentials(资源拥有者密码凭据许可) 参考 官方文档:2_resource_owner_passwords ...

  3. IdentityServer4之Client Credentials(客户端凭据许可)

    IdentityServer4之Client Credentials(客户端凭据许可) 参考 项目创建:0_overview,1_client_credentials 概念:客户端凭据许可 认证服务端 ...

  4. IdentityServer4之Implicit(隐式许可)

    IdentityServer4之Implicit(隐式许可) 参考 官方文档:3_interactive_login .7_javascript_client 概念:隐式许可 认证服务端配置 认证服务 ...

  5. 关于 IdentityServer4 中的 Jwt Token 与 Reference Token

    OpenID Connect(Core),OAuth 2.0(RFC 6749),JSON Web Token (JWT)(RFC 7519) 之间有着密不可分联系,对比了不同语言的实现,还是觉得 I ...

  6. 第43章 添加更多API端点 - Identity Server 4 中文文档(v1.0.0)

    您可以向托管IdentityServer4的应用程序添加更多API端点. 您通常希望通过它们所托管的IdentityServer实例来保护这些API.这不是问题.只需将令牌验证处理程序添加到主机(请参 ...

  7. IdentityServer4【Topic】Consent

    Conset这个概念在Identityserver4中是表示要当前用户对第三方应用对资源请求的一个确认,它会被做成一个页面. 术语映射: Consent page--确认页面,我喜欢叫做Consent ...

  8. ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍

    一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...

  9. IdentityServer4【QuickStart】之使用ClientCredentials流程保护API

    使用ClientCredentials流程保护API 这个示例展示了使用IdentityServer中保护APIs的最基本的场景. 在这个场景中我们会定义一个API和一个想要访问它的客户端.客户端会在 ...

  10. IdentityServer4【Introduction】之概括

    The Big Picture 大多数现代应用看起来都像下面的样子: 大多数的交互是下面这样: 浏览器与web应用之间的通信 web应用和web APIs之间的通信(这两者有时是独立的,有时是有用户参 ...

随机推荐

  1. 基于神经网络的颜色恒常性—Fully Convolutional Color Constancy with Confidence-weighted Pooling

    论文地址: http://openaccess.thecvf.com/content_cvpr_2017/papers/Hu_FC4_Fully_Convolutional_CVPR_2017_pap ...

  2. matplotlib 画图

    matplotlib 画图 1. 画曲线图       Tompson = np.array([0, 0, 0, 0, 0.011, 0.051, 0.15, 0.251, 0.35, 0.44, 0 ...

  3. SonarQube代码质量管理工具的升级(sonarqube6.2 + sonar-scanner-2.8 + MySQL5.6+)

    SonarQube升级注意事项 0. 前提条件 如果之前是使用sonarqube5.2 + sonar-runner-2.4 +MySQL5.5版本或者类似的组合. 安装方法请参照SonarQube代 ...

  4. totastmessage 触发事件后浮框消失的方法

    1. 前言 通过查了官放的文档,发现没有 totastmessage 触发事件后,浮框消失的方法,然后通过研究了下点击关闭时的源码,得到了一个的解决方案. 2. 样例代码如下 $("#dro ...

  5. Oracle12c 性能优化攻略:攻略1-2:创建具有最优性能的表空间

    问题描述:    1:表空间是存储数据库对象(例如索引 .表)的逻辑容器.    2:在创建数据库对象不为其指定存储属性,则相应的表和索引会自动继承表空间的存储特性.    故:若需要好的索引.表的性 ...

  6. java.net.ServerSocket 解析

    注:本文来自:简书:jianshu 作者:jijs链接:http://www.jianshu.com/p/7c0722a8b66f來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  7. linux 下 eclipse 安装

    下载: 官网选择相应安装包下载,我这里下了tar.gz包 安装: tar xzvf eclipse-inst-linux64.tar.gz 设置环境变量 export JAVA_HOME=/usr/l ...

  8. js有关事件驱动

    事件驱动               /*                 什么是事件?                 1.事件发生了                 2.我要对这个事件做对应的处理 ...

  9. html中hr的各种样式使用

    第一种: <hr style=" height:2px;border:none;border-top:2px dotted #185598;" /> height:2p ...

  10. node.js开发博客系统---前端项目搭建(一)

    Express: https://github.com/petecoop/generator-express 安装node.js和npm 执行: npm install -g yo npm insta ...