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