public async Task <IActionResult> CallWebApiUserProfileQueryAsync()
        {
            await semaphore.WaitAsync().ConfigureAwait(false);

            try
            {
                ClearLog();
                string result;
                try
                {
                    var userName = User.FindFirst("preferred_username")?.Value;

                    var authenticationResult = await ConfidentialClientUtils.AcquireTokenSilentAsync(
                        new[] { Startup.WebApiScope }, userName,
                        HttpContext.Session, ConfidentialClientUtils.CreateSecretClientCredential(),
                        GetCurrentUserId()).ConfigureAwait(false);

                    result = await CallApiAsync(WebApiUserProfileQuery, authenticationResult.AccessToken).ConfigureAwait(false);
                }
                catch (MsalException ex)
                {
                    result = "WebApp failed to call WebApiUserProfileQuery, MsalException - " + ex.Message;
                }
                catch (Exception ex)
                {
                    result = "WebApp failed to call WebApiUserProfileQuery, Exception - " + ex.Message;
                }

                return(View("~/Views/Home/Index.cshtml", result + GetFormattedLog()));
            }
            finally
            {
                semaphore.Release();
            }
        }
        private async Task <IActionResult> CallGraphUsersQueryAsync(ClientCredential clientCredential)
        {
            await semaphore.WaitAsync().ConfigureAwait(false);

            try
            {
                ClearLog();
                string result;
                try
                {
                    var authenticationResult =
                        await ConfidentialClientUtils.AcquireTokenForClientAsync(new[] { MsGraphDefaultScope },
                                                                                 HttpContext.Session,
                                                                                 clientCredential,
                                                                                 GetCurrentUserId()).ConfigureAwait(false);

                    result = await CallApiAsync(MsGraphUsersQuery, authenticationResult.AccessToken).ConfigureAwait(false);
                }
                catch (MsalException ex)
                {
                    result = "WebApp failed to call GraphUsersQuery, MsalException - " + ex.Message;
                }
                catch (Exception ex)
                {
                    result = "WebApp failed to call GraphUsersQuery, Exception - " + ex.Message;
                }

                return(View("~/Views/Home/Index.cshtml", result + GetFormattedLog()));
            }
            finally
            {
                semaphore.Release();
            }
        }
示例#3
0
        private async Task OnAuthorizationCodeReceivedAsync(AuthorizationCodeReceivedContext context)
        {
            string[] scopes = { "User.Read" };

            var userId = context.JwtSecurityToken != null?context.JwtSecurityToken.Claims.FirstOrDefault(claim => claim.Type == "oid").Value : "";

            // Acquire a Token for the Graph API and cache it using MSAL.
            var authenticationResult = await ConfidentialClientUtils.AcquireTokenByAuthorizationCodeAsync(context.ProtocolMessage.Code,
                                                                                                          scopes, context.HttpContext.Session, ConfidentialClientUtils.CreateSecretClientCredential(), userId).ConfigureAwait(false);

            // Notify the OIDC middleware that we already took care of code redemption.
            context.HandleCodeRedemption(authenticationResult.AccessToken, authenticationResult.IdToken);
        }
 public async Task <IActionResult> CallGraphUsersQueryByCertClientCredentialAsync()
 {
     return(await CallGraphUsersQueryAsync(ConfidentialClientUtils.CreateClientCertificateCredential()).ConfigureAwait(false));
 }
 public async Task <IActionResult> CallGraphUsersQueryBySecretClientCredential()
 {
     return(await CallGraphUsersQuery(ConfidentialClientUtils.CreateSecretClientCredential()));
 }