我在本地应用程序和Azure门户中安装了Microsoft Graph。我可以使用自己的帐户成功登录,但当其他员工尝试登录时,我收到了成功的身份验证和访问令牌,但当调用InitializeGraphClientAsync()
时,Microsoft.Graph.ServiceException
抛出以下内容...
Exception thrown: 'Microsoft.Graph.ServiceException' in System.Private.CoreLib.dll
Failed to initialized graph client.
Accounts in the msal cache: 1.
See exception message for details: Code: ErrorAccessDenied
Message: Access is denied. Check credentials and try again.
登录:
public async Task<string> SignIn()
{
// First, attempt silent sign in
// If the user's information is already in the app's cache,
// they won't have to sign in again.
var message = "";
try
{
var accounts = await PCA.GetAccountsAsync();
var silentAuthResult = await PCA.AcquireTokenSilent(Scopes, accounts.FirstOrDefault()).ExecuteAsync();
Debug.WriteLine("User already signed in.");
Debug.WriteLine($"Successful silent authentication for: {silentAuthResult.Account.Username}");
Debug.WriteLine($"Access token: {silentAuthResult.AccessToken}");
message = $"Successful silent authentication for: {silentAuthResult.Account.Username}";
}
catch (MsalUiRequiredException msalEx)
{
// This exception is thrown when an interactive sign-in is required.
Debug.WriteLine("Silent token request failed, user needs to sign-in: " + msalEx.Message);
message = "Silent token request failed, user needs to sign-in: " + msalEx.Message;
// Prompt the user to sign-in
var interactiveRequest = PCA.AcquireTokenInteractive(Scopes);
if (AuthUIParent != null)
{
interactiveRequest = interactiveRequest
.WithParentActivityOrWindow(AuthUIParent);
}
var interactiveAuthResult = await interactiveRequest.ExecuteAsync();
Debug.WriteLine($"Successful interactive authentication for: {interactiveAuthResult.Account.Username}");
Debug.WriteLine($"Access token: {interactiveAuthResult.AccessToken}");
message = $"Successful interactive authentication for: {interactiveAuthResult.Account.Username}";
}
catch (Exception ex)
{
Debug.WriteLine("Authentication failed. See exception messsage for more details: " + ex.Message);
message = "Authentication failed. See exception messsage for more details: " + ex.Message;
}
await InitializeGraphClientAsync();
return message;
}
初始化
private async Task InitializeGraphClientAsync()
{
var currentAccounts = await PCA.GetAccountsAsync();
try
{
if (currentAccounts.Count() > 0)
{
// Initialize Graph client
GraphClient = new GraphServiceClient(new DelegateAuthenticationProvider(
async (requestMessage) =>
{
var result = await PCA.AcquireTokenSilent(Scopes, currentAccounts.FirstOrDefault())
.ExecuteAsync();
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", result.AccessToken);
}));
await GetUserInfo();
IsSignedIn = true;
}
else
{
IsSignedIn = false;
}
}
catch (Exception ex)
{
Debug.WriteLine("Failed to initialized graph client.");
Debug.WriteLine($"Accounts in the msal cache: {currentAccounts.Count()}.");
Debug.WriteLine($"See exception message for details: {ex.Message}");
await SignOut();
}
}
这段代码是直接从微软的一个教程中提取出来的。
Azure :
API permissions
我将其配置为Accounts in any organizational directory (Any Azure AD directory - Multitenant)
2条答案
按热度按时间lymnna711#
您可以尝试检查并遵循以下解决方法来解决此问题:
Resolve Microsoft Graph authorization errors,
Microsoft Graph permissions reference
6ju8rftf2#
验证您的应用接收的访问令牌类型是否与所寻求或授予的权限类型匹配。
看来我一定是使用具有更高权限的早期版本登录的。检查为我的帐户提供的令牌与另一名员工的令牌,结果显示权限较少。添加必要的权限消除了错误并解决了问题。