同一RAML API的不同端点能否分别使用client_credentials和authorization_code授权模式
结论
完全可以实现你要的配置,RAML的安全方案设计天然支持在单API内为不同端点绑定独立的授权规则,不需要拆分API。
实现方法
你只需要先在RAML根节点预定义两种授权模式的安全方案,再给不同端点单独指定对应的安全方案即可,参考示例如下:
#%RAML 1.0 title: 多授权模式示例API version: v1 # 根级别定义两种OAuth2安全方案 securitySchemes: oauth2_client_creds: type: OAuth 2.0 description: client_credentials模式,适用于无用户上下文的服务间调用 settings: accessTokenUri: https://你的授权服务地址/token authorizationGrants: [ client_credentials ] scopes: [ "service:access" ] oauth2_auth_code: type: OAuth 2.0 description: authorization_code模式,适用于有用户参与的前端/客户端调用 settings: authorizationUri: https://你的授权服务地址/authorize accessTokenUri: https://你的授权服务地址/token authorizationGrants: [ authorization_code ] scopes: [ "user:access" ] # 端点1:仅允许客户端凭证授权调用 /service/data: get: securedBy: [ oauth2_client_creds ] responses: 200: body: application/json: example: { "code": 200, "data": [] } # 端点2:仅允许授权码模式调用 /user/info: get: securedBy: [ oauth2_auth_code ] responses: 200: body: application/json: example: { "user_id": "u123", "nickname": "测试用户" }
额外说明
- 如果你已经在RAML根节点配置了全局的
securedBy规则,只需要在对应端点的securedBy字段重新赋值,即可覆盖全局配置;如果需要完全关闭某个端点的授权校验,配置securedBy: []即可。 - 两种授权模式可以共用同一个授权服务地址,也可以配置不同的地址,RAML没有强制限制。
- 如果有端点需要同时支持两种授权模式,直接在
securedBy数组中添加两个安全方案的名称即可:securedBy: [ oauth2_client_creds, oauth2_auth_code ]。
内容的提问来源于stack exchange,提问作者obc
相关产品推荐
相关产品推荐

