javascript - Azure 网站单点登录以用户身份从 Azure Active Directory 访问 Azure 移动服务

标签 javascript azure-mobile-services azure-web-app-service azure-active-directory

我有一个 ASP.NET MVC 网站部署为 Azure 网站(称为网站)。该网站有一个部分需要授权。我已经设置了 Windows Azure Active Directory (WAAD) 来保护对该部分的访问。加载 protected 部分后,它将加载一个允许与 Azure 移动服务集成的 Javascript 应用程序。

我还有一个单独的 Azure 移动服务,用于数据存储(称为 mobserv)。我想从网站访问 mobserv 表和 api 端点。我正在使用 Azure 移动服务的 .NET 后端。 当然,我需要使用 [AuthorizeLevel] 保护这些 mobserv 端点。

教程展示了当我想以应用程序身份进行身份验证时如何执行此操作(使用 [AuthorizeLevel(AuthorizationLevel.Application)] ) - 只需添加对正确的 Javascript 客户端 (MobileServices.web-1.2.5.js) 的引用,提供 mobserv 应用程序 ID 和 token 。 CORS 的设置是为了允许交互。到目前为止,一切顺利。

但现在,我想使用 [AuthorizeLevel(AuthorizationLevel.User)] 保护某些端点。所以现在,请求必须被授权为用户。由于网站已经受到 WAAD 的保护,我不希望客户端为 javascript 客户端执行新的登录 - 我想重用当前的 WAAD 身份验证 header 以获得单点登录体验,以便 mobserv 能够识别用户。

我还没有找到任何关于如何执行此操作的提示。教程仅显示针对 mobserv 的应用程序级别身份验证或使用显式登录对话框。

有人知道如何做到这一点吗?

最佳答案

根据 vibronet 的帖子,移动服务确实支持访问 token 的 HTTP POST,但访问 token 必须将受众指定为您的移动服务。因此,为您的网站发行的 token 本身无法工作。您需要通过 AAD 流程之一对其进行转换。

因此,在 AAD 中,您需要有两个 Web 应用程序注册,一个用于您的网站,一个用于移动服务。在移动服务注册中,您需要定义可以向其他资源公开的权限。第一节Mobile Services + ADAL tutorial (“使用 Azure Active Directory 注册您的移动服务”)将引导您完成此过程。然后,您无需注册访问该权限的 native 客户端应用程序,而是转到您的网站注册并在那里配置访问权限。

一旦您拥有网站的 AAD token ,您就可以利用此权限来获取移动服务的 token 。最好使用 Active Directory 身份验证库中的代表流( JS.NET ,具体取决于您想要执行操作的位置)来完成此操作。 AAD 团队有a nice sample on how to do this ,移动服务也有a tutorial which might be helpful ,尽管它可以通过移动服务访问 SharePoint Online,而不是通过网站访问移动服务)

然后,您可以使用“客户端流”方法将 token 发送到您的移动服务,如 "How to: Authenticate Users" for the HTML/JS SDK 中所述。 。对于 AAD,调用将类似于:

client.login(
      "aad",
      {"access_token": "<TOKEN-FROM-AAD>"})
.done(function(results){
      alert("You are now logged in as: " + results.userId);
},
function(error){
      alert("Error: " + err);
});

用户将看不到任何新的 UI,但他们将登录,并且来自 SDK 的后续调用将进行身份验证。

从 MVC 后端执行此操作也可能更容易。我相信您可以从 ClaimsIdentity 获取访问 token ,然后您可以使用 Mobile Services .NET client SDK执行登录操作并促进从 MVC 站点到您的移动服务的调用:

JObject payload = new JObject();
payload["access_token"] = "<TOKEN-FROM-AAD>";
MobileServiceUser user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);

关于javascript - Azure 网站单点登录以用户身份从 Azure Active Directory 访问 Azure 移动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823339/

相关文章:

java - 适用于 Android 的 Windows Azure SDK - 如何从序列化中排除 DTO 的属性?

Azure表存储触发移动通知

ios - 如何使用 Swift 将图像上传到 Azure

.net - API 抛出错误的响应代码 500 内部错误而不是 204

azure - 我正在尝试将对我的 Azure Web 应用程序的访问限制为特定用户组

c# - Azure 部署带有纯文本连接字符串的 web.config 文件

javascript - 不能在 JSON 上使用点符号

javascript - Promise 运行成功和失败回调

javascript - 单击另一个元素时如何隐藏元素

javascript - 在javascript中添加多个元素