我正在尝试访问由APP ID服务实例保护的休息API。 我已经尝试了两种方法来访问其余资源,但总是<title>Redirect To OP</title>
重定向 HTML 作为响应而不是实际资源。
1. 方法1
使用云目录用户和grant_type=密码作为令牌端点
1.1 我在云目录中添加了用户和密码。
1.2 HTTP POST 到<oauthServer>/token
端点,客户端 ID 和密钥作为基本身份验证和grant_type=password
、username=<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 端点,如文档中所述:
- 可选:您可以将 OpenID Connect 客户端配置为选择性地接受有效的 OAuth 2.0 持有者访问令牌作为身份验证令牌,而无需将请求重定向到 OpenID Connect 提供程序。如果请求包含有效的 OAuth 2.0 持有者访问令牌,那么 Liberty OpenID 连接客户机将自动验证访问令牌,并根据令牌验证结果创建经过身份验证的使用者。如果请求不包含访问令牌或访问令牌无效,那么 Liberty OpenID Connect 客户机将继续将用户重定向到 OpenID Connect 提供程序。此函数使 Liberty 服务器能够像 RESTful 客户机一样同时为浏览器客户机和非浏览器客户机提供服务。您可以将inboundPropagation="supported">添加到配置中以启用此功能。
请参阅:在 Liberty 中配置 OpenID Connect 客户机
- 身份令牌"的标头,它应该是"授权持有者访问令牌"。
- accessToken 是不透明的令牌还是 JWT? 您可以发布示例 JWT 或不透明内省的结果吗?