问题标签 [azure-sdk-js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

azure - Azure Identity SDK (JS) 如何对用户的 Azure 帐户进行身份验证

我正在使用 Azure SDK (JavaScript) 设计我的第一个开发工具,我很难理解如何在生产中对用户进行身份验证,以便开发工具可以访问用户的 Azure 帐户。该工具将从租户中所有用户的 Azure Functions 中检索指标,以随着时间的推移根据这些指标显示 React 组件图。该应用程序将使用 npm run 命令在本地运行。

我在我的应用程序中使用 Azure Identity 的切入点是这篇博文 ( https://devblogs.microsoft.com/azure-sdk/authentication-and-the-azure-sdk/ )。我喜欢 DefaultAzureCredential 在开发中的工作方式,通过使用 AzureCliCredential 将租户用于运行它的任何开发人员。我想要一个类似的生产功能,但用于浏览器而不是 Azure Cli。换句话说,如果用户已经登录到 Azure 门户,它将获得其租户的凭据。我该怎么做?

我尝试的其中一件事是选择加入 DefaultAzureCredential 的交互式浏览器,如该博客文章中所述。但即使如此,我也可以在 src 中看到浏览器方法(https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/identity/identity/src/credentials/defaultAzureCredential.browser。 ts),我不知道在使用实际的 SDK 时如何选择这个。我在 Azure Identity 的 npm 包和文档(https://docs.microsoft.com/en-us/javascript/api/@azure/identity/defaultazurecredentialoptions?view=azure-node-最新的)也没有帮助我。如果这是我用例的正确选项,我想了解如何选择并使用它。

我尝试的另一件事是实现 InteractiveBrowserCredential。只要我传递了一个我的应用程序尚未使用的端口的 redirectUri,它确实会打开另一个选项卡,告诉我如果我尚未登录则登录到 Azure 门户。这正是我想要的用户体验在我的应用程序中。但是,在登录凭据后实际上并没有做任何事情。返回的凭据实际上有一个客户端 ID 等于 Azure CLI 的应用程序 ID (04b07795-8ddb-461a-bbee-02f9e1bf7b46) ( https://docs.microsoft.com/en-us/troubleshoot/azure/active-directory/ verify-first-party-apps-sign-in)出于某种原因。这导致我查看交互式浏览器凭据并发现它正在使用授权代码流(https://docs.microsoft.com/en-us/javascript/api/@azure/identity/interactivebrowsercredential?view=azure-node-latest)。这个流程似乎不适合我的用例,因为我必须注册我的应用程序。我不是要授予用户访问我的应用程序的权限,而是授予他们自己的 Azure 帐户的访问权限。我应该使用 InteractiveBrowserCredential 吗?

接下来,我研究了所有不同的身份验证流程。不过,它们似乎都不适合我的用例。我发现最接近的是客户端凭据流(https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow),因为我正在验证用户到他们自己的 Azure 帐户,而不是我的应用程序。但是,即使这个似乎也不太正确,因为当我查找如何使用 Azure Identity 实现该流程时(https://github.com/Azure/azure-sdk-for-js/blob/main/documentation/using -azure-identity.md#clientsecretcredential-and-clientcertificatecredential)我发现我必须传入租户 ID。但是应用程序在用户登录之前不会知道用户的租户 ID。哪个流程适合这个用例?

我的理解似乎有差距。如何使用 Azure SDK 实现身份验证流程,通过浏览器向他们自己的 Azure 租户验证用户(而不是向我的应用验证他们)?

0 投票
1 回答
55 浏览

azure - 交互式浏览器凭据“您无法在此处使用个人帐户登录。请改用您的工作或学校帐户。”

我正在尝试在我的应用程序中使用 Azure Identity (JS) 实现交互式浏览器凭据,以便用户可以针对我的开发工具对他们自己的 Azure 帐户进行身份验证。我得到的建议是在 Reddit 线程上需要在 Azure AD 中注册应用程序(https://www.reddit.com/r/AZURE/comments/smcl15/azure_identity_sdk_js_how_to_authenticate_to/)。我现在已经这样做了。

我已将 localhost:8083 和 localhost:8085 注册为重定向 URI,并选择了允许 Account 在任何组织目录中的选项。但是,我仍然收到错误消息“您无法使用个人帐户登录。请改用您的工作或学校帐户。” 我读过的关于该主题的每个答案(使用个人帐户访问多租户应用程序 AAD)都说我需要在清单中设置“signInAudience”:“AzureADandPersonalMicrosoftAccount”。然而,这就是我的清单已经是并且从一开始就是这样。如何修复错误?