【发布时间】: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