2017-11-17 138 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