我在 Azure 中有一个 Web 应用程序,用户通过浏览器中的链接(例如 https://
我正在考虑使用 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# 中所需的步骤?
答案 0 :(得分:0)
是的,它是正确的,行 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
但是,如果您想手动获取令牌,以下代码显示了使用 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