繁体   English   中英

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

[英]How can i use MSAL to authenticate when the app is in Azure?

我在 Azure 中有一个 Web 应用程序,用户通过浏览器中的链接(例如 https://<SITE_NAME>.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. 如果我的应用程序托管在 Azure 中,则 AcquireTokenInteractive 行将弹出“登录您的帐户”
    Microsoft 窗口和 Azure 服务器上将弹出该窗口,这是正确的还是我遗漏了什么?

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

当您使用适用于 .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]属性保护,确保只有经过身份验证的用户才能使用 Web 应用程序。

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

在调用 Web API 的 Web 应用中获取令牌 - Microsoft 身份平台 | 微软文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM