将基于 OAuth 2.0 的认证用于客户机应用程序

Open Authorization (OAuth) 2.0 描述了资源所有者授权访问其受保护资源时可使用的几种方式。 IBM® Cloud Pak for Business Automation as a Service 仅支持资源所有者密码凭证(ROPC)授权类型,用于验证客户端应用程序对云环境的访问权限。

注意: OAuth 2.0 基于身份验证的云订阅默认未启用。 如果您想使用它,请通过 IBM 支持门户提交申请。 外部链接会打开一个新窗口或选项卡.

ROPC 授权类型

在 OAuth 2.0 术语中, Cloud Pak for Business Automation as a Service 客户机应用程序是保密客户机。 对于 ROPC 授权类型,需要一组客户机凭证(由客户机标识和客户机密钥组成)以及资源所有者用户名和密码。 要获取客户机凭证,请使用 Credentials API 来生成此凭证。 对于用户名和密码,以帐户管理员身份登录云门户网站,生成一组服务凭证,然后为他们分配客户机应用程序所需的许可权。 许可权将用于控制对云环境的基于 OAuth 2.0 令牌的访问。

有关 OAuth 和 ROPC 授予类型的更多信息,请参阅 OAuth 2.0 授权框架 外部链接会打开一个新窗口或选项卡. 有关 Credentials API,请参阅示例:基于 OAuth 2.0 身份验证的凭据 REST API ,有关获取服务凭据,请参阅创建和管理服务帐户

管理 OAuth 2.0 客户机凭证

OAuth 2.0 客户机必须提供客户机凭证才能识别调用客户机上下文。 您可以决定需要使用多少组凭证。 例如,您可以将一组凭证用于所有 OAuth 2.0 客户机,或者对每个客户机分别使用一组独立凭证。

要在客户机应用程序中使用 OAuth 2.0 认证,您的应用程序必须包含以下交互。
重要信息: 以下调用可能会在响应中针对 PD-S-SESSION-ID 和 PD-ID cookie 返回 Set-Cookie 命令。 请勿在后续调用中使用这些 cookie。
  1. 获取 OAuth 2.0 访问令牌。
    使用 OAuth 2.0 /token 端点获取访问令牌,其中包括客户机(客户机标识和客户机密钥)及服务凭证(用户名和密码)。 例如:
    curl -k -v -X POST -H 'content-type: application/x-www-form-urlencoded' 
    -d grant_type=password -d client_id=<clientId> -d client_secret=<clientSecret>
    -d username=<serviceCredId> -d password=<svcCredSecret>
    https://www.bpm.ibmcloud.com/mga/sps/oauth/oauth20/token
    
    此调用将返回要在后续云操作 API 调用中使用的访问令牌、用于刷新访问令牌的刷新令牌以及访问令牌的有效期。 请注意,访问令牌的有效期通常为数分钟或数小时,而刷新令牌的有效期可以为数天。 不支持限定作用域。
    {"access_token":"CJ7yDymDAfSRz03W7zdX","refresh_token":"fGAv2qzuLnM030Brs8KFaIuY1Kd2P87sLFXI85lH","scope":"","token_type":"bearer","expires_in":1799}*
    如果此调用成功,那么将返回 HTTP 响应代码 201。 如果客户机或服务凭证无效,那么该调用将返回 HTTP 响应代码 BAD_REQUEST (400)
  2. 使用令牌访问云操作 API。
    在云操作 API 调用的 Authorization 头中包含上一步所返回的访问令牌。 例如:
    curl -k -v -H "Authorization: Bearer CJ7yDymDAfSRz03W7zdX" https://<tenantHost>/baw/dev/rest/bpm/wle/v1/user/current
    如果访问令牌无效或已到期,那么此调用将返回 HTTP 响应代码 302。
  3. 使用刷新令牌来刷新访问令牌。
    使用 OAuth 2.0 /token 端点。
    curl -k -v -X POST -H 'content-type: application/x-www-form-urlencoded' 
    -d grant_type=refresh_token -d refresh_token=fGU3UjAHG0XKTdnInU8ihqTLf48XJIzQtRUjNFVo
    -d client_id=<clientId> -d client_secret=<clientSecret>
    https://www.bpm.ibmcloud.com/mga/sps/oauth/oauth20/token
    
    此调用将返回一组新令牌。
    {"access_token":"DkhN7gg7mk2gsBjGi8ay","refresh_token":"ToY13V2yfoYaeVbBjTwFLhzwX7GiKd7Y801VfjGC","scope":"","token_type":"bearer","expires_in":1799}
    如果刷新令牌无效或已被使用,或者客户机凭证无效(例如,因为已被删除),此调用将返回 HTTP BAD_REQUEST (400) 响应代码。
  4. 在客户机应用程序处理结束时撤销刷新令牌和访问令牌

    客户机应用程序处理完成时,最好使用 OAuth 2.0 /revoke 端点来撤销这两个令牌。 首先撤销刷新令牌,然后撤销访问令牌。

    例如,使用以下调用来撤销刷新令牌:
    curl -k -v -X POST -H 'content-type: application/x-www-form-urlencoded' 
    -d client_id=<clientId> -d client_secret=<clientSecret>
    -d token=ToY13V2yfoYaeVbBjTwFLhzwX7GiKd7Y801VfjGC
    https://www.bpm.ibmcloud.com/mga/sps/oauth/oauth20/revoke
    
    此调用将始终返回成功 HTTP 响应代码,例如,200。
    注意: 访问 API 后,访问令牌将保持有效,直到其到期为止。

限制

系统定义的每日限制为数百个并发有效授权(访问令牌和刷新令牌对)。 客户机应用程序和资源所有者用户名跟踪授权。 预期将永远不会达到授权限制。 但是,如果出现一条消息,表明已达到授权限制,请检查客户机应用程序中的授权创建设计或联系 IBM 支持人员。