Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用MS Graph API时出错,CompactToken解析失败,错误代码:80049217_C#_Asp.net Core_Microsoft Graph Api_Microsoft Graph Sdks - Fatal编程技术网

C# 调用MS Graph API时出错,CompactToken解析失败,错误代码:80049217

C# 调用MS Graph API时出错,CompactToken解析失败,错误代码:80049217,c#,asp.net-core,microsoft-graph-api,microsoft-graph-sdks,C#,Asp.net Core,Microsoft Graph Api,Microsoft Graph Sdks,我们实现了获取登录用户在MFA中使用的电话号码。我们使用密码授权流,其中我们有一个服务帐户(具有全局管理员角色),该帐户将代表用户调用MS Graph API 我们能够获得访问令牌。但是,在调用MS Graph时,遇到以下错误 错误: MicrosoftGraphClientSDK client = new MicrosoftGraphClientSDK(); var graphClient = client.GetAuthenticatedClient(

我们实现了获取登录用户在MFA中使用的电话号码。我们使用密码授权流,其中我们有一个服务帐户(具有全局管理员角色),该帐户将代表用户调用MS Graph API

我们能够获得访问令牌。但是,在调用MS Graph时,遇到以下错误

错误:

    MicrosoftGraphClientSDK client = new MicrosoftGraphClientSDK();            
    var graphClient = client.GetAuthenticatedClient();

// Error encountered here:
    var phones = await graphClient.Me.Authentication.PhoneMethods[{objectiD of the user}].Request().GetAsync();
ServiceException:代码:InvalidAuthenticationToken 消息:CompactToken解析失败,错误代码:80049217

MS图形API调用:

    MicrosoftGraphClientSDK client = new MicrosoftGraphClientSDK();            
    var graphClient = client.GetAuthenticatedClient();

// Error encountered here:
    var phones = await graphClient.Me.Authentication.PhoneMethods[{objectiD of the user}].Request().GetAsync();
这就是我们在GetAuthenticatedClient中获取访问令牌的方式

public MicrosoftGraphClientSDK()
{
    _app_public = PublicClientApplicationBuilder.Create(clientID)
          .WithAuthority("https://login.microsoftonline.com/{tenantID}")
          .Build();
}

public Beta.GraphServiceClient GetAuthenticatedClient()
{
    var accessToken = GetUserAccessTokenAsync();

    var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =>
    {
        requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.ToString());
        return Task.FromResult(0);
    });

    _graphClient = new Beta.GraphServiceClient(delegateAuthProvider);

    return _graphClient;
}

public async Task<string> GetUserAccessTokenAsync()
{
    AuthenticationResult result;

    var accounts = await _app_public.GetAccountsAsync();
    if (accounts.Any())
    {
        result = await _app_public.AcquireTokenSilent(_scopes, accounts.FirstOrDefault())
                          .ExecuteAsync();
    }
    else
    {
        SecureString password = new SecureString();

        foreach (char c in pass)
            password.AppendChar(c);

        result = await _app_public
                                .AcquireTokenByUsernamePassword(_scopes, username, password)
                                .ExecuteAsync();
    }

    return result.AccessToken;
}
公共MicrosoftGraphClientSDK()
{
_app_public=PublicClientApplicationBuilder.Create(clientID)
.有权https://login.microsoftonline.com/{tenantID}”)
.Build();
}
public Beta.GraphServiceClient GetAuthenticatedClient()
{
var accessToken=GetUserAccessTokenAsync();
var delegateAuthProvider=新的DelegateAuthenticationProvider((requestMessage)=>
{
requestMessage.Headers.Authorization=newauthenticationHeaderValue(“Bearer”,accessToken.ToString());
返回Task.FromResult(0);
});
_graphClient=新的Beta.GraphServiceClient(delegateAuthProvider);
返回图形客户端;
}
公共异步任务GetUserAccessTokenAsync()
{
验证结果;
var accounts=await_app_public.GetAccountsAsync();
if(accounts.Any())
{
结果=wait _app _public.AcquireTokenSilent(_作用域,accounts.FirstOrDefault())
.ExecuteAsync();
}
其他的
{
SecureString密码=新SecureString();
foreach(过程中的字符c)
密码。AppendChar(c);
结果=等待应用程序公开
.AcquireTokenByUsernamePassword(_作用域、用户名、密码)
.ExecuteAsync();
}
返回result.AccessToken;
}
我已经在网上搜索了有关错误的信息,但无法找到解决方案。 我感谢你的答复。谢谢