身份验证(废弃)
飞布支持OIDC进行身份验证,实现了OIDC中定义的两种授权流程:基于cookie登录-授权码模式(Authorization Code)和基于Token登录-隐式模式(Implicit)。
支持OIDC Provider
飞布能与任意实现OIDC规范的供应商集成。目前主流OIDC供应商如下:
IDaaS服务商auth0、authing等
开源OIDC服务:okta、casdoor等。
快速操作
基本设置
在身份验证面板中点击“+”,进入OIDC新建页
首先,输入供应商名称,自动生成 “登录回调 URL”。
然后,前往AUTHING应用配置页,获取APP ID 、App Secret和Issuer ,分别填入身份验证器表单。
随后,输入APP ID。
接着,输入Issuer。输入后,系统自动生成服务发现地址,并从中获取jwksURL和用户端点
当开发WEB应用时,开启基于cookie的模式,同时填入App Secret。
当开发移动应用时,开启基于Token的模式。
若JwksURL无法访问,可将JWKS切换到JSON模式,然后输入JSON字符串。
最后,保存表单,完成配置。
值得注意的是,基于Cookie的登录,需要OIDC供应商(OIDC Provider)和飞布服务器后端(Relying-Party)同时配置回调地址。
首先是,复制 登录回调 URL, 前往AUTHING设置“登录回调 URL”,多个URL可用"英文逗号"分开。
接着,点击“配置登录回调”按钮,前往"设置->安全",设置 "重定向URL"。
系统提供了两个默认值:
localhost:9123/#/workbench/userInfo:用户详情页回调URL,用于测试OIDC
localhost:9123/#/workbench/rapi/loginBack:API预览页回调URL,用于测试需要授权的API接口。
后续,可根据集成的前端项目,添加对应URL。
回到详情页,点击右上角“测试”按钮。跳转至authing提供的登录页,登录后,可查看当前用户信息。
出于安全考虑,在回调至OIDC供应商URL时,系统会自动跳转到HTTPS链接。若想关闭该功能,可关闭 “强制 HTTPS 跳转”。
API设置
前往API管理面板,选择需要设置的API
登录访问:切换到设置面板,开启授权,限制API必须登录才能访问
数据权限:用@fromClaim修饰入参,限制API的数据权限
点击顶部菜单栏的“
”,前往API预览页,选择当前API
输入参数,测试接口,你会发现,接口返回401(这是因为你没登录)
在预览页顶部,选择OIDC供应商,点击前往登录,登录后可查看用户信息
重复步骤3,可以看到接口执行成功,有三种情形
登录访问:未限制数据权限,正常执行,唯一区别是需要用户登录才能执行
查询请求:限制数据权限,只返回当前用户拥有的数据
变更请求:限制数据权限,插入数据时绑定当前用户的标识,如UID或EMAIL等
客户端如何使用
基于COOKIE登录
构建如下URL,在网页上点击跳转即可。
http://localhost:9991/api/auth/cookie/authorize/<供应商ID>?redirect_uri=<当前页URL>
供应商ID:对应OIDC表单中的供应商ID
当前页URL:对应"设置->安全"中的"重定向URL"
基于TOKEN登录
客户端需要向请求中添加以下请求头:
如何获取TOKEN,可参考Authing的SDK。
工作原理
专业术语
EU(End-User):终端用户RP(Relying-Party):服务器后端,这里指飞布服务器后端OP(OIDC Provider): 提供身份验证的服务器,例如Authing 服务器
基于cookie登录-授权码模式
授权码模式是 OIDC 授权登录中最常用的模式,OP 服务器返回一个授权码 code 给开发者后端服务器,在后端完成 code 换取 access_token,再用 access_token 换取用户信息的操作,从而实现用户的身份认证。
1. 发起登录请求
发起授权需要拼接一个用来授权的 URL,并让终端用户在浏览器中访问,具体参数如下:
2.用户登录
发起 OIDC 登录之后,如果用户先前未在 OP 登录过,OP 会将用户重定向到登录页面,引导用户完成在 OP 的认证,此时用户需要选择一种方式进行登录:

3.获取code
OP将验证此用户是否合法,验证通过后会将浏览器重定向到发起授权登录请求时指定的 redirect_uri 并通过 URL query 传递授权码 code 参数。
4.使用code换取token
飞布默认换取 token 身份验证方式为 client_secret_post,需要向token_endpoint发送POST请求,具体如下:
5.签发访问令牌
OP将会验证第4步中的请求参数,当验证通过后(校验authorization code是否过期,client id和client secret是否匹配等),OP将向RP返回access token。
基于Token登录-隐式模式
OIDC 隐式模式不会返回授权码 code,而是直接将
access_token和id_token通过 URL hash 发送到回调地址前端,后端无法获取到这里返回的值,因为 URL hash 不会被直接发送到后端。该模式常结合移动应用或 Web App 使用。
1. 用户授权请求
发起隐式模式的授权登录需要拼接一个 URL,并让终端用户在浏览器中访问,不能直接输入认证地址域名。具体参数如下:
2.用户授权应用(略)
3.用访问令牌重定向URI
假设用户授予访问权限,跳转后链接示例:
为什么信息在 URL hash 里而不是 query 里?因为 hash 内容不会直接发送到服务器,避免 id_token、access_token 被盗用。
4.传递给应用程序的访问令牌
浏览器向RP发送access token。RP采用两种方式校验令牌:
公钥签名校验:优先使用使用公钥验证签名。公钥地址(jwks_uri)一般为:
<Issuer>/.well-known/jwks.json。**在线接口校验:**若公钥验签失败,则调用供应商的token验证接口进行在线验证。userinfo_endpoint?
获取用户信息
直到access token 过期或失效之前,RP使用access_token,通过OP的userinfo_endpoint API换取用户信息。如果发起授权登录时的 scope 参数不同,这里的返回信息也会不同,返回信息中的字段取决于 scope 参数。字段符合 OIDC 规范 (opens new window),用户信息字段与 scope 对应关系请参考 scope 参数对应的用户信息。
具体请求如下:
返回值示例:
最后更新于
这有帮助吗?