Azure 网站单一登录以用户身份从 Azure Active Directory 访问 Azure 移动服务
Azure Website Single Sign On accessing Azure Mobile Service from Azure Active Directory as User
我有一个 ASP.NET 的MVC网站部署为Azure网站(称为网站)。该网站有一个需要授权的部分。我已经设置了Windows Azure Active Directory(WAAD)来保护对该部分的访问。加载受保护部分后,它将加载允许与 Azure 移动服务集成的 Javascript 应用。
我还有一个单独的 Azure 移动服务,用于数据存储(称为 mobserv)。我想从网站访问 mobserv 表和 api 端点。我正在使用 Azure 移动服务的 .NET 后端。当然,我需要使用 [AuthorizeLevel] 保护这些 mobserv 端点。
教程展示了当我想作为应用程序进行身份验证(使用 [AuthorizeLevel(AuthorizationLevel.Application)]
)时如何执行此操作 - 只需添加对正确 Javascript 客户端 (MobileServices.web-1.2.5.js) 的引用,提供 mobserv 应用程序 ID 和令牌。CORS 设置为允许交互。目前为止,一切都好。
但是现在,我想使用 [AuthorizeLevel(AuthorizationLevel.User)]
保护某些端点。因此,现在,请求必须以用户身份授权。由于网站已受 WAAD 保护,因此我不希望客户端为 javascript 客户端执行新的登录 - 我想重用当前的 WAAD 身份验证标头以获得单点登录体验,以便 mobserv 能够识别用户。
我没有找到任何关于如何做到这一点的提示。教程仅显示针对 mobserv 或使用显式登录对话框的应用程序级身份验证。
有人知道如何做到这一点吗?
继vibronet的帖子之后,移动服务确实支持访问令牌的HTTP POST,但访问令牌必须将受众指定为移动服务。因此,为您的网站发行的令牌将无法自行工作。需要通过其中一个 AAD 流对其进行转换。
因此,在 AAD 中,需要有两个 Web 应用程序注册,一个用于网站,一个用于移动服务。在移动服务注册中,需要定义可向其他资源公开的权限。移动服务 + ADAL 教程的第一部分("向 Azure Active Directory 注册移动服务")将引导你完成此操作。然后,无需注册访问该权限的本机客户端应用,而是转到网站注册并在那里配置访问权限。
拥有网站的 AAD 令牌后,可以利用此权限获取移动服务的令牌。这最好使用 Active Directory 身份验证库中的代理流(JS 或 .NET,具体取决于您要执行操作的位置)来完成。AAD 团队有一个关于如何执行此操作的很好示例,移动服务也有一个教程可能会有所帮助,尽管它对 SharePoint Online 进行移动服务访问,而不是对移动服务进行网站访问)
然后,可以使用"客户端流"方法将令牌发送到移动服务,如 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 后端执行此操作也可能更容易。我相信你可以从 ClaimIdentity 获取访问令牌,然后只需使用移动服务 .NET 客户端 SDK 执行登录操作,并促进从 MVC 站点到移动服务的调用:
JObject payload = new JObject();
payload["access_token"] = "<TOKEN-FROM-AAD>";
MobileServiceUser user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload);
实现"按原样"的令牌重用,因为您为网站获取的令牌范围仅限于您的应用,如果转发到任何其他资源,则应被拒绝。从 AAD 的角度来看,有各种流允许你将原始令牌换成旨在与 Web API 一起使用的新令牌 - 所有这些都不需要用户执行任何新操作。但是,您的方案包括一些特定于移动服务的移动部件,因此我不确定如何在此处应用。我正在为移动服务人员标记这篇文章,希望他们能够插话。
- Windows Azure通知中心错误
- 从Particle Photon Webhook到Azure的JSON格式
- 通过Azure存储以HTML形式获取JSON文件
- 当Swiper是多行时,Swiper Slide Active类
- 从Cordova应用程序中的Azure AD获取access_token
- 更新azure移动服务数据库中的现有项目
- Fin上传器直接上传到Azure Blob存储-在Javascript中获取文件uri
- Windows Azure+DevExrpess(PhoneJs)正在获取ToDoList(Standart示例)
- Azure documentdb存储过程返回部分结果
- Active Class 不会随 JavaScriptFunction 而改变
- 如何将 JavaScript 函数添加到 Active 类中
- HTML/CSS 如何关闭菜单,然后使用 class=“active”
- Javascript/jQuery:当用户Active 值更改时切换 (vjs-fade-out) (video.js)
- Javascript下载一个URL-Azure Blob存储
- 用jquery切换.active类
- 将URL路径与<a>attr('href')来动态更新.active类
- Azure移动服务;插入到另一个表&呼叫'插入'剧本
- azure移动服务中的数组长度问题
- Azure 网站单一登录以用户身份从 Azure Active Directory 访问 Azure 移动服务
- 为使用Azure Active Directory身份验证保护的Web API的AJAX调用添加身份验证令牌