以编程方式访问受 IBM 应用程序标识保护的资源



我正在尝试访问由APP ID服务实例保护的休息API。 我已经尝试了两种方法来访问其余资源,但总是<title>Redirect To OP</title>重定向 HTML 作为响应而不是实际资源。

1. 方法1
使用云目录用户和grant_type=密码作为令牌端点

1.1 我在云目录中添加了用户和密码。

1.2 HTTP POST 到<oauthServer>/token端点,客户端 ID 和密钥作为基本身份验证和grant_type=passwordusername=<cloud_direcotry_user>password=<password>

1.3 我得到access_token和身份令牌

1.4 使用授权标头调用受保护的资源,该标头具有访问令牌和标识令牌作为标头值'authorization' Bearer <accesstoken> <identity token>

1.5 响应包含重定向 HTML 而不是实际资源 JSON/XML。

方法2

2.1 使用<oauthserverUrl>/token端点和grant_type=client_credentials获取访问令牌 添加使用客户端 ID 和密钥作为用户名和密码的基本身份验证

2.2 我获得了持有者类型的访问令牌

2.3 使用授权标头调用受保护的资源

authorization: Bearer <access_toke>

2.4 我得到相同的重定向响应<title>Redirect To OP</title>而不是实际资源 JSON/XML

___ 新Update____

下面是资源提供程序的 iberty 的 openid 连接客户端配置。

<openidConnectClient id="<identifier>"
clientId= "${APPID_CLIENT_ID}"
clientSecret= "${APPID_CLIENT_SECRET}"                         authorizationEndpointUrl="${APPID_AUTH_SERVER}/authorization"
tokenEndpointUrl="${APPID_AUTH_SERVER}/token"
jwkEndpointUrl="${APPID_AUTH_SERVER}/publickeys"
issuerIdentifier="${APPID_AUTH_SERVER_ISSUER}"
tokenEndpointAuthMethod="basic"
signatureAlgorithm="RS256"
authFilterid="myAuthFilter"
trustAliasName="ng.bluemix.net"
trustStoreRef="appidtruststore"
redirectToRPHostAndPort="https://${env.APPID_SAMPLE_HOST}:${env.APPID_SAMPLE_SSL_PORT}"
userIdentityToCreateSubject="email"
inboundPropagation="supported"
validationEndpointUrl="${APPID_AUTH_SERVER}/introspect"
validationMethod="introspect"

/>

我假设您正在使用 WebSphere Liberty 并配置了一个 OIDC 客户端。 您似乎应该在服务器中配置 OIDC 客户端.xml以支持受保护的 REST 端点,如文档中所述:

  1. 可选:您可以将 OpenID Connect 客户端配置为选择性地接受有效的 OAuth 2.0 持有者访问令牌作为身份验证令牌,而无需将请求重定向到 OpenID Connect 提供程序。如果请求包含有效的 OAuth 2.0 持有者访问令牌,那么 Liberty OpenID 连接客户机将自动验证访问令牌,并根据令牌验证结果创建经过身份验证的使用者。如果请求不包含访问令牌或访问令牌无效,那么 Liberty OpenID Connect 客户机将继续将用户重定向到 OpenID Connect 提供程序。此函数使 Liberty 服务器能够像 RESTful 客户机一样同时为浏览器客户机和非浏览器客户机提供服务。您可以将inboundPropagation="supported">添加到配置中以启用此功能。

请参阅:在 Liberty 中配置 OpenID Connect 客户机

在您的方法 1 中,不支持"授权持有者访问令牌
  1. 身份令牌"的标头,它应该是"授权持有者访问令牌"。
  2. accessToken 是不透明的令牌还是 JWT? 您可以发布示例 JWT 或不透明内省的结果吗?

最新更新