OpenID Connect
Frappe 也使用 OpenID Connect 这一重要标准来认证用户。要使用 id_token 获取 access_token,请在授权请求期间将 openid 作为 scope 参数的值传递。
如果 scope 是 openid,则包含 access_token 的 JSON 响应还将包含一个使用 HS256 和 Client Secret 签名的 JSON Web Token(id_token)。解码后的 id_token 包含 at_hash。
带有 scope openid 的 Bearer Token 示例
{
"token_type": "Bearer",
"id_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.eyJpc3MiOiJodHRwczovL21udGVjaG5pcXVlLmNvbSIsImF0X2hhc2giOiJOQlFXbExJUy1lQ1BXd1d4Y0EwaVpnIiwiYXVkIjoiYjg3NzJhZWQ1YyIsImV4cCI6MTQ3Nzk1NTYzMywic3ViIjoiNWFjNDE2NThkZjFiZTE1MjI4M2QxYTk0YjhmYzcwNDIifQ.1GRvhk5wNoR4GWoeQfleEDgtLS5nvj9nsO4xd8QE-Uk",
"access_token": "ZJD04ldyyvjuAngjgBrgHwxcOig4vW",
"scope": "openid",
"expires_in": 3600,
"refresh_token": "2pBTDTGhjzs2EWRkcNV1N67yw0nizS"
}
Frappe 社交登录设置
在此示例中,有 2 台服务器,
主服务器
这是托管所有用户的主服务器。例如:https://frappe.io。要将此服务器设置为主服务器,请前往 设置 > 集成 > 社交登录密钥,并在 Frappe Server URL 字段中输入 https://frappe.io。此 URL 会在所有连接到该服务器进行认证的其他 Frappe 服务器中重复使用。实际上,这就是主要的身份提供者(IDP)。
在此服务器下,根据需要添加任意数量的 OAuth Client。因为我们正在设置一台应用服务器,所以只需添加一个 OAuth Client
Frappe 应用服务器
这是连接到 IDP 的客户端。请前往此服务器上的 设置 > 集成 > 社交登录密钥,并为 Frappe Client ID 和 Frappe Client Secret 添加适当的值(请参考在主服务器中添加的客户端)。如前所述,将 Frappe Server URL 保持为 https://frappe.io
现在,您将在登录页面上看到 Frappe 图标。点击此图标即可使用在主服务器(IDP)中创建的账户登录 https://frappe.io
注意:如果在注册客户端时勾选了 Skip Authorization,则不会显示允许或拒绝授予资源访问权限的页面。如果应用程序属于同一组织内部,并且需要无缝的用户体验,则可以使用此选项。
步骤
第 1 部分:在 Frappe 身份提供者(IDP)上
登录 IDP
在 IDP 上添加 OAuth 客户端
在 IDP 上设置服务器 URL
第 2 部分:在 Frappe 应用服务器上
在应用服务器上设置 Frappe Client ID 和 Frappe Client Secret(请参考在 IDP 上设置的客户端)
注意:Frappe 服务器 URL 是存储您组织身份信息的主服务器。
应用服务器上的登录界面(使用 frappe 登录)
第 3 部分:重定向到 IDP
在 IDP 上使用用户登录
在 IDP 上确认访问权限
第 4 部分:返回应用服务器
使用来自 IDP 的 ID 登录应用服务器