您如何使用AcquireTokenSilentAsync验证用户身份?

时间:2018-11-30 14:19:32

标签: c# azure adal msal

我正在尝试以编程方式从加入Azure AD的计算机授权Azure应用程序。

如果我在Internet Explorer中转到应用程序URL,则可以验证已登录的用户帐户。

我当前的代码如下:

using Microsoft.IdentityModel.Clients.ActiveDirectory;

AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/TENANTGUID");
Uri uri = new Uri("urn:ietf:wg:oauth:2.0:oob");
var pparams = new PlatformParameters(PromptBehavior.Auto, null);
AuthenticationResult result = await context.AcquireTokenAsync("https://graph.windows.net", "1950a258-227b-4e31-a9cf-717495945fc2", uri, pparams);

此呼叫成功,但我想为当前登录的用户获取令牌。

AcquireTokenAsync调用的前两个参数是resourceclientid

我可以获取我要访问的应用程序的主页URL和应用程序ID,但找不到有效的两者的组合。

我应该将什么参数传递给此函数,以静默验证登录的用户并获取可在后续调用应用程序时使用的授权标头?

1 个答案:

答案 0 :(得分:1)

我现在建议您将MSAL.NET Integrated Windows Authentication用于加入域或AAD的计算机:

代码类似于:

static async Task GetATokenForGraph()
{
 string tenant = "contoso.com" // can also be a GUID or organizations for multi-tenant
 string authority = $"https://login.microsoftonline.com/{tenant}";
 string[] scopes = new string[] { "user.read" };
 PublicClientApplication app = new PublicClientApplication(clientId, authority);
 var accounts = await app.GetAccountsAsync();

 AuthenticationResult result=null;
 if (accounts.Any())
 {
 result = await app.AcquireTokenSilentAsync(scopes, accounts.FirstOrDefault());
 }
 else
 {
  try
  {
   result = await app.AcquireTokenByIntegratedWindowsAuthAsync(scopes);
  }
  catch (MsalUiRequiredException ex)
   { 
    // For details see the article