gpt4 book ai didi

azure - 是否可以使用 MSAL 获取 Azure AD V1 token ?

转载 作者:行者123 更新时间:2023-12-01 11:14:33 26 4
gpt4 key购买 nike

我目前正在为我的应用设置使用 MSAL 的 ADD。我遇到的问题是,API 设置为接受 Azure AD V1 token ,但在我当前的 MSAL 设置中,我不断收到 Azure AD V2。

我团队中的其他人正在使用 ADAL,但我们想迁移到 MSAL。我确信我做错了什么,因为似乎很难相信没有向后兼容性。

这是我的 Msal 配置:

import * as Msal from 'msal';

export const applicationConfig = {
clientID: process.env.REACT_APP_MSAL_CLIENT_ID,
authority: process.env.REACT_APP_AUTHORITY_TENANT,
graphScopes: ['user.read'],
graphEndpoint: process.env.REACT_APP_GRAPH_ENDPOINT,
};

/**
* will get the call back once the API is complete
* (either complete or failure), redirects flows.
* Is called after the authentication request is completed
* successfully/failure
*
* @param {*} errorDesc
* @param {*} token
* @param {*} error
* @param {*} tokenType
*/
const tokenReceivedCallback = async (errorDesc, token, errorMsg) => {
try {
if (token) console.log('Success!');
} catch (error) {
throw new Error(`${errorMsg}:${errorDesc}`);
}
};

/**
* Instantiate UserAgentApplication
*/
const userAgentApplication = new Msal.UserAgentApplication(
applicationConfig.clientID,
applicationConfig.authority,
tokenReceivedCallback,
{
cacheLocation: process.env.REACT_APP_CACHE_LOCATION,
redirectUri: process.env.REACT_APP_REDIRECT_URI,
},
);

/**
* Log user in
* Checks if there is no user and if there is no
* callback occuring within the window url which throws into
* infinite loop, then login, and redirect to SSO login
* @param {*} graphScopes
*/
export const signIn = async graphScopes => {
console.log(graphScopes);
/**
* avoid duplicate code execution on page load in case of iframe and popup window
*/
if (!userAgentApplication.getUser() && !userAgentApplication.isCallback(window.location.hash)) {
/**
* login site, and go directly to SSO
*/
await userAgentApplication.loginRedirect(graphScopes, process.env.REACT_APP_DOMAIN);
/**
* acquireTokenSilent method makes a silent request to ADD to obtain an access token.
* ADD returns an access token containing the user consented scopes to allow
* the app to securely call the api
*/
await userAgentApplication.acquireTokenSilent(graphScopes);
}
};

/**
* Logs user out
*/
export const logOut = () => userAgentApplication.logout();

这是我使用 jwt.ms 时得到的结果: enter image description here

提前致谢!

最佳答案

是的,可以从 V2 端点请求 V1 访问 token 。颁发给客户端应用程序的访问 token 的类型(v1 或 v2)由资源 API 的应用程序注册决定。正如其他人指出的那样,您的示例代码请求 Microsoft Graph 范围,并且 Microsoft Graph 应用程序注册配置为接受 v2 token 。您可以通过查看应用程序注册来确定您的 API 配置为接受什么类型的 token 。在 portal.azure.com 中,打开“应用注册(预览)”,转到“ list ”部分,然后查找属性“accessTokenAcceptedVersion”。如果设置为 null1,则所有请求访问 token 来调用此资源的客户端应用程序都将获得 v1 访问 token (无论它们是使用 MSAL 还是 ADAL 来请求)访问 token )。

调用 v1 资源 API 的 ADAL 应用的常见调用模式是提供资源 URI 作为范围。这告诉端点为资源 API 的应用程序注册中配置的所有权限颁发访问 token 。 MSAL(使用 v2 终结点)允许请求任何范围,无论它是否位于资源的应用注册范围的静态列表中。要获得与 ADAL(使用 v1 端点)相同的行为,请将“.default”附加到资源 URI(例如“https://contoso.onmicrosoft.com/V1TodoListService/.default”)

在 Ignite 上,我演示了仅接受 v1 访问 token 的现有待办事项列表服务,并演示了新 MSAL 客户端应用程序的整个门户配置,以请求 v1 访问 token 并调用此服务。在这里观看:https://youtu.be/77A47CfNqIU?t=3120

关于azure - 是否可以使用 MSAL 获取 Azure AD V1 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368394/

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