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

标签 azure authentication azure-sdk azure-identity azure-sdk-js

我正在使用 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://learn.microsoft.com/en-us/javascript/api/@azure/identity/defaultazurecredentialoptions?view=azure-node-latest ) 也没有帮助我。如果这是适合我的用例的正确选项,我想了解如何选择并使用它。

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

接下来,我研究了所有不同的身份验证流程。不过,它们似乎都不适合我的用例。我发现的最接近的是客户端凭据流 ( https://learn.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 租户验证用户身份(而不是向我的应用程序验证用户身份)?

最佳答案

谢谢ShwetaMathurQ & A.中回答这个问题在此发布相同内容以帮助 Stack Overflow 社区成员。

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

注册您的应用程序后,您可以根据不同的 OAuth 流程获取访问 token ,该 token 是根据您的场景调用各种资源(您的情况下的用户)或 protected API 所需的。

Azure 身份 TokenCredential根据不同场景提供多种获取Access Token的流程。

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

Client credential flow是 OAuth 流程,通常用于服务器到服务器的交互,通常在后台运行,无需立即与用户交互,有助于获取 token 并调用 protected Web API。

完成reference

关于Azure Identity SDK (JS) 如何对用户的 Azure 帐户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71012128/

相关文章:

api - 通过基本身份验证与查询字符串传递访问 token

c# - 如何配置部署在 IIS 和远程客户端上的 WCF 服务以从远程客户端 PC 进行身份验证?

azure - 每小时生成的 Azure Blob 存储 SAS key 数量是否有限制?

exception - Azure表存储错误: "Unexpected response code for operation : 99"

c# - Redis - 通过一些 "key"获取单个元素

c# - Xamarin MonoAndroid Azure移动服务InsertAsync

azure - 访问 token 给出不同的澳元?

ios - 如何从 POST json 获取数据

c# - 上传到 Azure Blob 存储的 MP4 视频文件无法播放

javascript - 从 v10 升级到 v12 - AzureSDK JS