【问题标题】:Azure AD App Service /.auth/refresh endpoint returns 401.71 UnauthorizedAzure AD 应用服务 /.auth/refresh 端点返回 401.71 Unauthorized
【发布时间】:2017-07-20 01:10:57
【问题描述】:

我正在使用带有 vanilla MVC 5 Web 应用程序的 Azure AD 测试 Azure 应用程序服务身份验证/授权。我已按照https://cgillum.tech/2016/03/07/app-service-token-store/http://cgillum.tech/2016/03/25/app-service-auth-aad-graph-api/ 的教程进行操作

我可以确认 /.auth/me 端点正常运行,并且我在缓存中确实有刷新和访问令牌。

应用注册配置了对 SharePoint Online 的权限。

但是,/.auth/refresh 每次都会失败,401.71 未经授权。 Web App 上的详细日志流仅提供一般错误消息。

我在各种论坛的评论部分看到了对 aa 值的引用:“access_type=offline”,这可能需要也可能不需要包含在 authsettings 的“additionalLoginParams”键中,尽管它通常在上下文中提及谷歌授权。

在使用 AAD 时是否需要添加是否有明确的答案?教程中未提及的任何其他权限?

这是我用来进行测试调用的代码

 string endpoint = myAppUrl + "/.auth/refresh";

 string idToken = this.Request.Headers["X-MS-TOKEN-AAD-ID-TOKEN"];
 string accessToken = this.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
 string refreshToken = this.Request.Headers["X-MS-TOKEN-AAD-REFRESH-TOKEN"];

 using (HttpClient client = new HttpClient())
 {
     try
     {
         client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
         HttpResponseMessage response = client.GetAsync(endpoint).Result;
         if (response.IsSuccessStatusCode)
         {
             string content = response.Content.ReadAsStringAsync().Result;
         }
     }
     catch (Exception oops)
     {
         string oopsMessage = oops.Message;
     }
 }

【问题讨论】:

  • 您如何使用 /.auth/refresh API 调用进行身份验证?
  • 我从 c# HttpClient 调用,将“Bearer”令牌添加到 DefaultRequestHeaders,与调用 /.auth/me 或 Graph 等的方式相同。我尝试使用 Id、Access和刷新令牌。是否需要添加Graph权限?
  • 如果我在 AdditionalLoginParams 中放置多个资源,我也会被拒绝访问应用程序...如果这更合适,我可以问另一个问题。谢谢你这么快回复,顺便说一句。
  • 有趣。将附加登录参数作为新问题发布。我觉得我们不直接支持,但如果您的应用需要访问多个资源,您可以使用一些变通方法。

标签: azure-web-app-service azure-active-directory


【解决方案1】:

问题在于 /.auth/refresh API 不适用于 AAD 不记名令牌。相反,您需要使用会话 cookie (AppServiceAuthSession cookie) 或会话令牌 (x-zumo-auth 标头),它们是登录操作的输出。

对于给您带来的不便以及缺少明确的错误信息,我们深表歉意。我们将考虑在未来的版本中添加对此的支持。

【讨论】:

  • 这是一个应该继续发挥作用的功能,还是我们可以期待进出的功能?这是一个非常好的功能,我感谢您为此付出的所有努力。
  • 您是在询问刷新 API 吗?您可以指望这一点始终得到支持——它对于许多应用程序来说都非常重要,尤其是移动应用程序。如果有的话,我们想让它变得更好。
  • 是的,我应该更具体一些。我的意思是直接从 Web 应用程序访问刷新 api,而不使用 SDK 或涉及移动服务。似乎没有太多关于 AppServiceAuthSession cookie 的官方文档,所以我很想知道重大更改以及您认为这种使用它们的方法有多稳定。
  • 啊,是的,不幸的是,我们目前还没有真正好的协议文档。这是我正在做的事情。您应该期望我们不会做出任何会影响任何现有应用的重大更改。
  • @ChrisGillum 现在已经超过 3 年了,想知道这个刷新 api 是否有任何更新,在我的情况下,我的 azure 函数的初始令牌是由后端服务生成的, 没有办法用这个api来使用cookies。后端服务或函数应用有没有办法刷新令牌?
猜你喜欢
  • 2021-11-21
  • 2020-01-01
  • 2020-12-15
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多