如何使用 WSO2 API Manager 1.10.0 刷新应用程序的访问令牌?
How to refresh the access token of an Application with the WSO2 API Manager 1.10.0?
我(终于)设法使用 API 和 WSO2 API Manager 1.10.0 为应用程序获取了有效的访问令牌。但是,我不清楚如何刷新此令牌。
我通过使用以下有效负载调用 https://myapi.mydomain.com/api/am/store/v0.9/applications/generate-keys?applicationId=2b205ee5-5891-4913-96e0-b4952d7d2a4c 获得了工作访问令牌
var payload = {
'grant_type': 'password',
'username': username,
'password': password,
"validityTime": validityTime,
"keyType": "PRODUCTION",
"accessAllowDomains": [ domain ]
}
结果如下所示:
Generating application keys for application with id '2b205ee5-5891-4913-96e0-b4952d7d2a4c'
{ consumerKey: '5k7UDuFTV0UE7mESHerEIm2Nj3ga',
consumerSecret: 'm1hS_SNfHF25l9lP9YjYpf977VUa',
keyState: 'APPROVED',
keyType: 'PRODUCTION',
supportedGrantTypes:
[ 'urn:ietf:params:oauth:grant-type:saml2-bearer',
'iwa:ntlm',
'refresh_token',
'client_credentials',
'password' ],
token:
{ tokenScopes: [ 'am_application_scope', 'default' ],
validityTime: 2678400,
accessToken: 'be8661550ee51b7682902e58a58108f6' } }
看来我确实获得了刷新访问令牌的授权。然而,文档仅提及当您有刷新令牌时如何执行此操作,而回复中缺少该令牌。我做错了什么?
您可以在 API 商店(开发人员门户)中刷新令牌,如果您单击 订阅 选项卡,并且有:
- 现在手动点击重新生成按钮刷新,或者
- 单击 cURL 按钮生成可用于以编程方式刷新的命令:
备注:
- 您还可以阅读有关 Token API in documentation、
的更多信息
- 对于屏幕截图,我使用了 API 管理器的托管版本 - WSO2 API Cloud。
您用来生成令牌的 API 不是您工作的 API。 API 'applications/generate-keys' 用于生成与应用程序相关的密钥(客户端密码和客户端 ID)。生成的令牌
这有一个 client_credential 授权类型。这就是为什么您没有获得刷新令牌的原因。该令牌是使用客户端 ID 和密码生成的。
我看到您在有效负载中将授权类型作为 'password' 发送,但这些参数一开始是无效的。 api 不接受授权类型名称。 (api 用于生成应用程序密钥。因此不需要授权类型)
{
"validityTime": "3600",
"keyType": "PRODUCTION",
"accessAllowDomains": ["ALL"
]
}
要生成令牌,请使用令牌 api (https://docs.wso2.com/display/AM1100/Token+API)。这些 apis 是根据 OAuth2 规范实现的。使用 'password' 时您将获得一个刷新令牌
使用这些令牌的授予类型 apis
我(终于)设法使用 API 和 WSO2 API Manager 1.10.0 为应用程序获取了有效的访问令牌。但是,我不清楚如何刷新此令牌。
我通过使用以下有效负载调用 https://myapi.mydomain.com/api/am/store/v0.9/applications/generate-keys?applicationId=2b205ee5-5891-4913-96e0-b4952d7d2a4c 获得了工作访问令牌
var payload = {
'grant_type': 'password',
'username': username,
'password': password,
"validityTime": validityTime,
"keyType": "PRODUCTION",
"accessAllowDomains": [ domain ]
}
结果如下所示:
Generating application keys for application with id '2b205ee5-5891-4913-96e0-b4952d7d2a4c'
{ consumerKey: '5k7UDuFTV0UE7mESHerEIm2Nj3ga',
consumerSecret: 'm1hS_SNfHF25l9lP9YjYpf977VUa',
keyState: 'APPROVED',
keyType: 'PRODUCTION',
supportedGrantTypes:
[ 'urn:ietf:params:oauth:grant-type:saml2-bearer',
'iwa:ntlm',
'refresh_token',
'client_credentials',
'password' ],
token:
{ tokenScopes: [ 'am_application_scope', 'default' ],
validityTime: 2678400,
accessToken: 'be8661550ee51b7682902e58a58108f6' } }
看来我确实获得了刷新访问令牌的授权。然而,文档仅提及当您有刷新令牌时如何执行此操作,而回复中缺少该令牌。我做错了什么?
您可以在 API 商店(开发人员门户)中刷新令牌,如果您单击 订阅 选项卡,并且有:
- 现在手动点击重新生成按钮刷新,或者
- 单击 cURL 按钮生成可用于以编程方式刷新的命令:
备注:
- 您还可以阅读有关 Token API in documentation、 的更多信息
- 对于屏幕截图,我使用了 API 管理器的托管版本 - WSO2 API Cloud。
您用来生成令牌的 API 不是您工作的 API。 API 'applications/generate-keys' 用于生成与应用程序相关的密钥(客户端密码和客户端 ID)。生成的令牌 这有一个 client_credential 授权类型。这就是为什么您没有获得刷新令牌的原因。该令牌是使用客户端 ID 和密码生成的。
我看到您在有效负载中将授权类型作为 'password' 发送,但这些参数一开始是无效的。 api 不接受授权类型名称。 (api 用于生成应用程序密钥。因此不需要授权类型)
{
"validityTime": "3600",
"keyType": "PRODUCTION",
"accessAllowDomains": ["ALL"
]
}
要生成令牌,请使用令牌 api (https://docs.wso2.com/display/AM1100/Token+API)。这些 apis 是根据 OAuth2 规范实现的。使用 'password' 时您将获得一个刷新令牌 使用这些令牌的授予类型 apis