Server RSA Keys: 用于给ID Tokens加密。
django-oidc-provider自带’OIDC_USERINFO’的settings,默认指向一个函数,该函数调用claims
(一个字典)和user
(user 实例),返回claims
(字典),该字典包含所有函数中声明的属性。可以自己定义,并在settings中以点分隔的路径字符串指定该函数。
UserConsent模型可以查看用户授权的应用,包含以下参数user
,client
,expires_at
,scope
,date_given
。
client(第三方应用)可以仅使用ID和SECRET作为client凭信获取access token请求由其自身控制的资源,这些资源通过client.scope
字段向认证服务器提前说明。
在登录结束前,会生成access token
。调用OIDC服务器的任意接口都需要携带该参数,用于证明当次调用使用特定的用户通过特定的应用发起。
当收到401 Unauthorized
状态码,可能是因为access token过期,携带以下请求参数访问POST借口可以获取新的access token:
curl -X POST \
-H "Cache-Control: no-cache" \
-H "Content-Type: application/x-www-form-urlencoded" \
"http://localhost:8000/token/" \
-d "client_id=651462" \
-d "client_secret=37b1c4ff826f8d78bd45e25bad75a2c0" \
-d "grant_type=refresh_token" \
-d "refresh_token=0bac2d80d75d46658b0b31d3778039bb"
Session 管理
OIDC Connect Session Management 1.0规范定义了如何监视用户在OIDC服务器的的登录状态,以遍第三方应用在用户登出OIDC Provider后登出用户。
在settings中添加如下配置即可应用:
MIDDLEWARE_CLASSES = [
...
'oidc_provider.middleware.SessionManagementMiddleware',
]
OIDC_SESSION_MANAGEMENT_ENABLE = True
在多台服务器部署时,可能需要添加随机但固定的字符串OIDC_UNAUTHENTICATED_SESSION_MANAGEMENT_KEY
,因为授权的第三方应用可以通过session计算出浏览器状态而未授权的应用缺少相关的参数。通常安装时会生成随机值,但这些值在不同的服务器不相同。
第三方应用可以通知OIDC服务器,客户已登出,这时,该应用可以将客户导向OIDC服务器的登出URL。通常跳转地址由OIDC服务器的Discovery应答中的end_session_endpoint
参数获取。
OAuth2.0授权框架通过额外的规范拓宽了其范围。其中,OAuth2.0 Token 内省定义了一份协议,该协议允许第三方应用提供token以获取被授权的资源。
在第三反应用的scope中添加token_introspection
,如果OIDC_INTROSPECTION_VALIDATE_AUDIENCE_SCOPE
是True,那么client_id
也必须加入scope。
自省终端接受oauth2.0 的token并返回含有元数据的JSON文件。如下:
{
"aud": "480546",
"sub": "1",
"exp": 1538971676,
"iat": 1538971076,
"iss": "http://localhost:8000",
"active": true,
"client_id": "480546"
}
自省错误时,需返回如下键值对:
{
"active": "false"
}