2017-11-17 217 views
-1

在Azure移动应用程序的后端,我使用Azure的内置身份验证服务在用户登录到我的应用程序时获取访问令牌通过Microsoft帐户。我正在成功获取该令牌。通过Azure的内置应用服务身份验证获得的令牌与Microsoft Graph无效的身份验证令牌错误

但是,我然后尝试呼叫Microsoft Graph以获取经过身份验证的用户的姓名,电子邮件和ID。 Azure的日志流显示我这个错误:

MicrosoftGraphServiceException: 
    Code: InvalidAuthenticationToken 
    Message: CompactToken parsing failed with error code: 8004920A 

这里是适用的代码:

[MobileAppController] 
public class MicrosoftAccountController : ApiController 
{ 
    MicrosoftAccountCredentials credentials; 

    // GET api/<controller> 
    public async Task<DataObjects.User> Get() 
    { 

    if (credentials == null) 
    { 
     credentials = 
      await this.User.GetAppServiceIdentityAsync<MicrosoftAccountCredentials>(this.Request); 
     var accessToken = credentials.AccessToken; 
    } 


    GraphServiceClient graphClient = 
    new Microsoft.Graph.GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) => 
    { 
     requestMessage.Headers.Authorization = 
     new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken); 
     return Task.FromResult(0); 
    })); 

    Microsoft.Graph.User graphuser = await graphClient.Me.Request().GetAsync(); 

} 

感谢您的帮助!

+0

从您的问题中不清楚您要求的范围。你可以添加一个你回来的JWT令牌的例子吗? –

+0

我在诊断日志流中显示:2017-11-19T22:34:03 PID [11148]详细调用外部HTTP端点GET https://apis.live.net/v5.0/me。 2017-11-19T22:34:04 PID [11148]信息登录已完成'我删除了用户的电子邮件'。提供者:'microsoftaccount'。 2017-11-19T22:34:04 PID [11148]为站点'mattsapp.azurewebsites.net'详细写'AppServiceAuthSession'cookie。长度:492. – Matt

+0

https://mattsapp.azurewebsites.net/.auth/login/done#token= – Matt

回答

0

根据您的描述,我认为您可以通过浏览器直接访问您的移动应用程序https://{your-app-name}.azurewebsites.net/.auth/login/microsoftaccount并使用MSA登录。登录后,你可以尝试访问https://{your-app-name}.azurewebsites.net/.auth/me检索登录的用户信息如下:

enter image description here

然后,你可以检索access_token并尽量模拟通过邮递员的要求,以缩小这一问题:

​​

However, I then attempt to call out to the Microsoft Graph to obtain the authenticated user's name, email, and ID.

我认为你可以在你的手机客户端调用await App.MobileService.InvokeApiAsync("/.auth/me", HttpMethod.Get, null);后,用户登录检索用户i NFO。我发现您创建了自定义的WebAPI,并根据当前请求提取了令牌,并使用图形客户端来检索用户信息,但我没有检查您的代码,但是您可以使用remote debugging您的移动应用程序对您的代码进行故障诊断。

此外,您可以按照App Service Token Store了解有关应用程序服务身份验证/授权的更多详细信息。

UPDATE:

However, I then attempt to call out to the Microsoft Graph to obtain the authenticated user's name, email, and ID. Azure's log stream shows me this error

我检查你的代码,发现微软图形对象在graph.microsoft.com,而MSA登录为App服务的身份验证/授权使用的Live SDK。并且the Live SDK已过时,我没有发现任何客户端SDK用于使用Rest API,我假设您可以自己创建WebRequest并访问Live SDK REST API