当应用程序在 Azure 中时,如何使用 MSAL 进行身份验证?

时间:2021-07-14 09:20:53

标签: c# azure msal

我在 Azure 中有一个 Web 应用程序,用户通过浏览器中的链接(例如 https://.azurewebsites.net)进行连接。

我正在考虑使用 Graph API,并且我已经在 Azure 中的应用程序上实现如下

       string clientId = "<CLIENT_ID>";
       string clientSecret = "<CLIENT_SECRET>";

        var app = ConfidentialClientApplicationBuilder
         .Create(clientId)
         .WithClientSecret(clientSecret)             
         .WithRedirectUri("http://localhost")
         .Build();

        string[] scopes = new string[]
        {
           "https://graph.microsoft.com/user.read"
        };
        var result = await app.AcquireTokenInteractive(scopes)
            .ExecuteAsync();

//此时如果成功登录,用户将获得一个访问令牌,他们可以用来进行其他api调用。

如果我的应用程序托管在 Azure 中,AcquireTokenInteractive 行将弹出“登录您的帐户”Microsoft 窗口,并且该窗口将在 Azure 服务器上弹出,是正确的还是我遗漏了什么?

>

如果以上不正确,我是否必须手动执行 1. 获取授权令牌 2. 使用授权令牌获取访问令牌?

如果这是必需的方式,是否有示例应用程序显示了在 c# 中所需的步骤?

1 个答案:

答案 0 :(得分:0)

  1. 如果我的应用托管在 Azure 中,AcquireTokenInteractive 行将弹出“登录您的帐户”
    Microsoft 窗口和 Azure 服务器上将弹出该窗口,这是正确的还是我遗漏了什么?

是的,它是正确的,行 AcquireTokenInteractive 将弹出“登录您的帐户”,AcquireTokenInteractive 方法将获取访问令牌,MSAL 将此令牌保存在其令牌缓存中。 Azure服务器上会弹出微软窗口。

当您使用适用于 .NET 的 Microsoft 身份验证库 (MSAL.NET) 获取访问令牌时,该令牌将被缓存。

当应用程序需要令牌时,它应该首先调用 AcquireTokenSilent 方法来验证缓存中是否存在可接受的令牌。

在许多情况下,可以根据缓存中的令牌获取具有更多范围的另一个令牌。

也可以在令牌即将到期时刷新令牌(因为令牌缓存也包含刷新令牌)。

推荐的模式是先调用 AcquireTokenSilent 方法。如果 AcquireTokenSilent 失败,则使用其他方法获取令牌。

您可以参考以下链接了解更多信息:

https://github.com/Azure-Samples/ms-identity-aspnet-webapi-onbehalfof

https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-net-acquire-token-silently

  1. 如果上述内容不正确,我是否必须手动执行 1. 获取授权令牌 2. 使用该授权令牌获取访问令牌?
    如果这是必需的方式,是否有示例应用程序显示了在 c# 中所需的步骤?

但是,如果您想手动获取令牌,以下代码显示了使用 Microsoft.Identity.Web 在家庭控制器中执行此操作的示例。

它使用 REST API(而不是 Microsoft Graph SDK)调用 Microsoft Graph。

要获取调用下游 API 的令牌,请注入

ITokenAcquisition 通过依赖注入在控制器的构造函数(或页面构造函数,如果您使用 Blazor)中提供服务,

并且您在控制器操作中使用它,在守护程序场景中为用户 (GetAccessTokenForUserAsync) 或应用程序本身 (GetAccessTokenForAppAsync) 获取令牌。

控制器方法受 [Authorize] 属性保护,确保只有经过身份验证的用户才能使用网络应用。

您可以通过以下链接浏览示例应用:

Get a token in a web app that calls web APIs - Microsoft identity platform | Microsoft Docs