gpt4 book ai didi

node.js - 无法从 Azure 应用程序的授权代码检索访问 token

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:26 30 4
gpt4 key购买 nike

我正在使用 Passport-azure-ad 库对我的 Azure 应用程序执行 SSO 到 Azure AD。以下是选项对象:

const options = {
identityMetadata: process.env.AZUREAD_IDENTITY_METADATA,
clientID: process.env.AZUREAD_AUTH_CLIENT_ID,
responseType: 'code id_token',
responseMode: 'form_post',
redirectUrl: process.env.AZUREAD_REDIRECT_URL,
allowHttpForRedirectUrl: true,
clientSecret: process.env.AZUREAD_AUTH_CLIENT_SECRET,
validateIssuer: false,
issuer: null,
passReqToCallback: true,
useCookieInsteadOfSession: true,
cookieEncryptionKeys: [
{ key: '********************************', iv: '************' },
{ key: '********************************', iv: '************' },
],
scope: ['profile', 'offline_access', 'https://graph.microsoft.com/mail.read'],
loggingLevel: 'info',
nonceLifetime: null,
nonceMaxAmount: 5,
clockSkew: null,
};

从 AD 回调获取授权代码 (req.body.code) 后,我使用它通过 adal-node 库检索我的应用程序的访问 token 。相关代码片段 -

const authenticationContext = new AuthenticationContext(
`https://login.microsoftonline.com/<tenant>.onmicrosoft.com`,
);
authenticationContext.acquireTokenWithAuthorizationCode(
req.body.code,
process.env.AZUREAD_REDIRECT_URL,
process.env.AZUREAD_AUTH_CLIENT_ID,
process.env.AZUREAD_AUTH_CLIENT_ID,
process.env.AZUREAD_AUTH_CLIENT_SECRET,
function(err, response) {
let message = '';
if (err) {
message = 'error: ' + err.message + '\n';
}
message += 'response: ' + JSON.stringify(response);

if (err) {
console.log(message);
return;
}
...

但是此方法会导致以下错误:

"error": "invalid_grant",
"error_description": "AADSTS54005: OAuth2 Authorization code was already redeemed, please retry with a new valid code or use an existing refresh token.\r\nTrace ID: 539cdaf3-460d-43fa-b4bb-6f23a8058800\r\nCorrelation ID: 507aafd9-5a4a-4417-b1f8-9fe4a5bc4cd3\r\nTimestamp: 2020-02-28 13:10:27Z",
"error_codes": [
54005
],

还尝试使用 Postman 根据文档 ( https://learn.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-protocols-oauth-code#use-the-authorization-code-to-request-an-access-token ) 检索访问 token ,但这也会导致相同的错误。

请帮我找出这里的错误。

最佳答案

Azure AD 将不再接受授权代码来颁发已使用的 token 。

您每次都需要获取新的授权码。此外,您还可以更改代码以请求刷新 token ,该刷新 token 将传递给其他资源/由其他资源使用,因为刷新 token 仍然可以重复使用。

引用:

https://social.msdn.microsoft.com/Forums/en-US/4192e141-309a-4dd6-a5c9-f1a8ce32f4ca/aadsts54005-oauth2-authorization-code-was-already-redeemed

关于node.js - 无法从 Azure 应用程序的授权代码检索访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60452781/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com