django-oidc-provider备忘录

Server RSA Keys: 用于给ID Tokens加密。
django-oidc-provider自带’OIDC_USERINFO’的settings,默认指向一个函数,该函数调用claims(一个字典)和user(user 实例),返回claims(字典),该字典包含所有函数中声明的属性。可以自己定义,并在settings中以点分隔的路径字符串指定该函数。
UserConsent模型可以查看用户授权的应用,包含以下参数userclientexpires_atscopedate_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"
}

猜你喜欢

转载自blog.csdn.net/JosephThatwho/article/details/103130825