WSO2 IS:通过 SOAP 使用 OAuth 授权代码流时出错 API

WSO2 IS: Error using OAuth Authorization Code flow with SOAP API

我正在使用 OAuth 授权代码流程来验证用户身份并根据 WSO2 身份服务器授权我的应用程序。我正在使用一个简单的 node/express 服务器,使用 Passport.js 来获取访问令牌,邮递员使用该访问令牌向 SOAP API 发出一些测试请求。

当使用 Bearer Token 方法授权我的应用程序时,我在 IS 日志中收到以下错误:0 active authenticators registered in the system. The system should have at least 1 active authenticator service registered. 我在 Postman 中收到以下错误:500 Internal Server Error,响应正文如下, <faultstring>Authentication failure</faultstring>.

这是它在 Postman 中的样子:

相同的访问令牌可用于 REST API 请求,例如“https://localhost:9443/scim2/Me”。

谁能告诉我这里缺少什么?

尝试从授权服务中手动获取访问令牌并使用它

第一步:获取授权码

https://<is_server_url>:9443/oauth2/authorize?client_id=<id>&redirect_uri=<callback_url>&response_type=code&scope=openid

您将在回调中获得授权码URL

第 2 步:调用令牌服务获取访问令牌

Post https://<is_server_url>:9443/oauth2/token
Content-Type:application/x-www-form-urlencoded
Authorization:Basic <base64encoded "<client_id>:<client_secret>">

grant_type:authorization_code
scope:openid
code:<code_from_step_1>
redirect_uri:<callback_url>

exp:

client_id=**abcdefgh12345678**
client_secret=**xyzsecretkey**
callback_url=**http://locahost/callback**
scope=openid

服务器:本地主机 base64encode(client_id:client_secret)= base64encode(abcdefgh12345678:xyzsecretkey ) => YWJjZGVmZ2gxMjM0NTY3ODp4eXpzZWNyZXRrZXk=

  1. GET https://localhost:9443/oauth2/authorize?client_id=**abcdefgh12345678**&redirect_uri=**http://locahost/callback**&response_type=code&scope=openid

它会向回调url请求返回一个参数code,比如说code=this01is02your03code,请检查你的浏览器地址栏

  1. POST https://localhost:9443/oauth2/token

HEADERS

Content-Type:application/x-www-form-urlencoded

Authorization:Basic **YWJjZGVmZ2gxMjM0NTY3ODp4eXpzZWNyZXRrZXk=**

BODY

grant_type:authorization_code

scope:openid

code:this01is02your03code

redirect_uri:http://locahost/callback

这将 return 一个访问令牌,假设服务器 return 编辑的令牌是 12345678ASDFGH

现在您可以使用此令牌调用任何 RestFull 或 SOAP 服务

Authorization: Bearer 12345678ASDFGH

WSO2 身份服务器中的 SOAP API 无法使用不记名令牌进行身份验证。他们可以使用基本身份验证和 cookie 进行身份验证。这就是在响应中获得 Authentication failure 的原因。

但是身份服务器中的 REST API 可以使用 Bearer 令牌进行身份验证。因此 /scim2/Me 使用访问令牌成功验证。