Azure Active Directory /.auth/refresh由于在令牌存储中未找到刷新令牌而发出的刷新请求失败

时间:2017-02-01 16:10:55

标签: cordova azure authentication azure-web-sites azure-mobile-services

我有一个Cordova应用程序,它使用JS客户端SDK成功通过Azure Active Directory进行身份验证。我按照CGillum帖子中的说明对Azure网站进行了更改。这成功地为我提供了一个可以与Microsoft Graph一起使用的令牌,它在调用/.auth/me时返回刷新令牌。

但是,当我尝试拨打/.auth/refresh时,我收到 403 错误,日志显示如下。

2017-02-01T16:00:54  PID[8648] Warning     The refresh request issued
by sid... failed because no refresh tokens were found in the token
store. 
2017-02-01T16:00:54  PID[8648] Information Sending response: 403.80 Forbidden

我在Azure网站设置中打开了令牌存储。我还注意到,如果我调用/.auth/me,它不会再返回刷新令牌。这可能是预期的行为,因为我知道一些提供商只会给你一次刷新令牌(不过对AAD不确定)。

  public getAccessTokenFromRefreshTokenFromAppService(): Promise<any> {
return new Promise<boolean>((resolve, reject) => {
  let apiUrl = Resources.azureMobileClientUrl + '/.auth/refresh';
  var headers = new Headers();
  headers.append('X-ZUMO-AUTH', this.azureService.mobileServiceClient.currentUser.mobileServiceAuthenticationToken);
  return this.http.get(apiUrl, { headers: headers })
    .map(res => res.json())
    .subscribe(data => {
      console.log('Get Refresh Token - ', data);
      let token = data.authenticationToken;

      resolve(data);
    },
    error => {
      reject(error);
    },
    () => {
    });
});

}

1 个答案:

答案 0 :(得分:0)

如果我没有误解您的要求,您希望在cgillum {/ 3}}中提到的Azure Web Apps / Mobile Apps中启用刷新令牌。

正如他所提到的,如果您计划通过AAD IDP启用此功能,我们的App Services需要几个额外的配置。您可以参考http://cgillum.tech/2016/03/07/app-service-token-store/了解更多详情。

一般来说,启用它有两个步骤:

  1. 在您的AAD应用程序中生成密钥,并同意 Windows Azure Active Directory 的两项权限:Read directory data&amp; Read directory data
    http://cgillum.tech/2016/03/25/app-service-auth-aad-graph-api/

  2. 通过REST API更新App Service身份验证配置

    • 在App Service的“身份验证/授权”部分设置上面生成的密钥 enter image description here

    • 进入Azure资源管理器
      enter image description here
      additionalLoginParams设为["response_type=code id_token", "resource=https://graph.windows.net"]
      enter image description here