public async Task <TokenResultModel> GetTokenForAsync(string resource, IEnumerable <string> scopes = null) { ClientCredential clientCred = new ClientCredential(_aadClientId, _appSecret); ClaimsPrincipal current = ClaimsPrincipal.Current; if (current == null) { throw new AuthenticationException("Missing claims principal."); } System.IdentityModel.Tokens.BootstrapContext bootstrapContext = new System.IdentityModel.Tokens.BootstrapContext(current.Identities.First().BootstrapContext.ToString()); if (bootstrapContext == null) { throw new AuthenticationException("bootstrapContext is null."); } string userName = current.FindFirst(ClaimTypes.Upn) != null ? current.FindFirst(ClaimTypes.Upn).Value : current.FindFirst(ClaimTypes.Email).Value; string userAccessToken = bootstrapContext.Token; UserAssertion userAssertion = new UserAssertion(userAccessToken, kGrantType, userName); string authority = String.Format(CultureInfo.InvariantCulture, _aadInstance, _aadTenant); string userId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value; AuthenticationContext authContext = new AuthenticationContext(authority); string userObjectID = (ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value; var user = new UserIdentifier(userObjectID, UserIdentifierType.UniqueId); try { _result = await authContext.AcquireTokenAsync(resource, clientCred, userAssertion); return(_result.ToTokenResult()); } catch (AdalException ex) { throw new AuthenticationException( $"Failed to authenticate on behalf of {userName}", ex); } }