0

我正在使用 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 租户验证用户(而不是向我的应用验证他们)?

4

1 回答 1

0

感谢ShwetaMathur在问答中回答了这个问题。在此处发布相同内容以帮助 Stack Overflow 社区成员。

要让 Azure AD 用户访问您的应用程序,您的应用程序还应该需要在 Azure AD 中注册。

注册应用程序后,您可以根据不同的 OAuth 流程获取访问令牌,这些流程需要根据您的场景调用各种资源(在您的情况下为用户)或受保护的 API。

Azure Identity TokenCredential 根据不同的场景提供了多种获取访问令牌的流程。

InteractiveBrowserCredential 是启动系统默认浏览器以交互验证用户并获取访问令牌的一种方式。
使用访问令牌,您可以检索用户信息或访问 Azure 租户中的任何其他资源。InteractiveBrowserCredential 使用 授权代码流 对基于浏览器的应用程序的用户进行身份验证并进一步访问资源。

客户端凭证流 是通常用于服务器到服务器交互的 OAuth 流,通常在后台运行,无需立即与用户交互,并有助于获取令牌并调用受保护的 Web API。

完整参考

于 2022-02-28T05:07:14.940 回答