OIDC协议_各车系的OBD协议「建议收藏」

OIDC协议_各车系的OBD协议「建议收藏」1.IDToken是jwt,包含一组关于身份认证会话的声明(claim)2.accesstoken在oidc中也能使用,伴随着idtoken一起被发送到客户端,但是这不是必要的,因为idtoken已经包含了用户信息,

OIDC协议_各车系的OBD协议「建议收藏」"

1.ID Token是jwt,包含一组关于身份认证会话的声明(claim)

2.access token在oidc中也能使用,伴随着id token一起被发送到客户端,但是这不是必要的,因为id token已经包含了用户信息,access token只是为了和OAuth兼容。

3.oidc新增了用户端点,可以获取用户的个人信息

4.oidc规定客户端可以简单的发现授权服务器的所有端点

主要术语

EU:一个人类用户

RP:Relying Party,依赖放,只受信任的客户端

OP:OpenID Provider,有能力提供EU身份认证的服务,授权服务器

ID Token:jwt数据,包含EU身份认证的信息

UserInfo Endpoint:用户信息接口。当用户使用access token访问时,返回用户信息。

ID Token

包含了一组的Claims和其他辅助的公共的Claims


Authorization Code

认证过程

1.客户端准备好认证的必要参数,scope(必须包含openid),response_type,client_id,redirect_uri,state这5个必选参数。其他可选参数:response_mode,nonce,display。。。

2.客户端向授权服务器发起请求

3.授权服务器鉴定这个终端用户

4.授权服务器获得这个终端用户的授权信息

5.授权服务器给客户端一个授权码

6.客户端的用这个授权码请求授权服务器的token端点

7.客户端收到授权服务的响应,包含了ID Toekn和Access Token

8.客户端校验ID Token并获得该用户的个人信息

认证端点

认证请求

在授权端点,授权服务器必须同时支持GET和POST。当客户端使用GET时,参数以查询字符串的形式给出,当使用POST时,参数以表单形式提交。

Scope:必须的。其中必须包含openid

response_type:必须的。当使用的是Authorization Code时,该值为code

client_id:必须的。客户端标识

redirect_uri:必须的。重定向地址

state:推荐的。自己定一个值,用于防止跨站请求伪造

还要其他参数

认证请求验证

授权服务器必须对认证请求进行验证

1.授权服务器必须根据OAuth2.0验证所有的参数

2.确保scope里面包含了openid

3.确保所有需要的参数都存在

4.If the sub (subject) Claim is requested with a specific value for the ID Token, the Authorization Server MUST only send a positive response if the End-User identified by that sub value has an active session with the Authorization Server or has been Authenticated as a result of the request. The Authorization Server MUST NOT reply with an ID Token or Access Token for a different user, even if they have an active session with the Authorization Server. Such a request can be made either using an id_token_hint parameter or by requesting a specific Claim Value as described in Section 5.5.1, if the claims parameter is supported by the implementation.

授权服务器认证终端用户

授权服务器需要验证终端用户是否被授权

授权服务器必须与用户进行交互

1.终端用户没有被验证

2.在参数中带了prompt参数

在下列情况下,授权服务器不得与终端用户进行交互:

身份验证请求包含prompt参数,其值为none。在这种情况下,如果终端用户尚未通过身份验证或无法进行静默身份验证,则授权服务器必须返回一个错误。

授权服务器获得这个终端用户的授权信息

一旦对最终用户进行了身份验证,授权服务器必须在向依赖方发布信息之前获得授权决策。当所使用的请求参数允许时,可以通过与终端用户进行交互对话,明确表示同意的内容,或者通过处理请求的条件或其他方法(例如,通过以前的管理同意)建立连接

成功的认证响应

认证成功之后,会重定向到redirect_uri,并返回code和state(如果有的话)

错误的认证响应

error:必须的。错误代码

error_description:错误描述

error_uri:错误的uri

认证响应校验

客户端在收到服务端的认证响应之后,必须进行校验

Token 端点

Token请求

客户端向token 端点发起一个请求。

grant_type:authorization_code

code:获取的code码

redirect_uri=必须和前一次一样

必须使用POST请求和表单提交

Token请求验证

如果颁发了客户端凭据或使用了其他客户端身份验证方法,则对客户端进行身份验证

确保将授权码颁发给经过身份验证的客户端

确保授权码是有效的

验证以前没有使用授权码

确保2次的redirect_uri是一样的

验证使用的授权代码是为了响应OpenID Connect身份验证请求而发出的(以便从令牌端点返回ID令牌)。

成功的Token响应

在验证成功之后,返回ID Token和Access Token

响应使用application/json类型。

token_type必须是Bearer

错误的Token响应

返回application/json类型。

返回http 400

Token响应校验

客户端必须对IDToken和Access Token进行校验

注意:OIDC声明的只有Code,Implicit,Hybrid模式,而Password和Credentials都是OAuth2.0定义的,这两个可以说根本就没有用户认证这一说。


UserInfo Endpoint

userinfo端点存储着用户循序,需要用access token来获取

UserInfo请求

可以使用GET或者POST。必须使用Bearer Token

一般建议使用GET。

Authorization:Bearer xxxxx

成功的UserInfo响应

返回json对象

错误的UserInfo响应

返回http 401

客户端校验UserInfo响应

使用Scope来请求Claims的值

scope=openid profile email phone

使用Claims来请求Claims的值

把claims的值构造成一个json,

  {
   "userinfo":
    {
     "given_name": {"essential": true},
     "nickname": null,
     "email": {"essential": true},
     "email_verified": {"essential": true},
     "picture": null,
     "http://example.info/claims/groups": null
    },
   "id_token":
    {
     "auth_time": {"essential": true},
     "acr": {"values": ["urn:mace:incommon:iap:silver"] }
    }
  }

刷新令牌

必须使用POST的表单来提交。服务端必须验refresh token。

验证成功,会返回一个新的refresh token和access token

今天的文章OIDC协议_各车系的OBD协议「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/74190.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注