【发布时间】:2013-03-11 20:10:46
【问题描述】:
我想利用 ACS 对网站上的 Windows 帐户用户(以及最终来自其他身份提供商的用户)进行身份验证。
我找到了很多关于 ACS 的资源,但大多数都围绕使用 WIF/使用 UI 层中的托管代码来验证用户。我想避免这种情况。是否可以通过使用 javascript/jQuery 对 ACS 进行基于 REST 的调用来检索 Microsoft 帐户用户的令牌,从而从 ACS 检索令牌?
我看到的一个接近的例子是这个链接,但是它使用服务身份而不是利用身份提供者。 http://code.msdn.microsoft.com/windowsazure/MVC4-Web-API-With-SWT-232d69da
这是我的最终目标:
- 这个网站有两层,一个 UI 层 (MVC 4) 和一个服务层 (MVC WebAPI)。这两个层都需要在 Azure 中相互独立地进行扩展。
- 我想让 UI 层调用 ACS 来确定当前会话是否经过身份验证。如果是,我希望 ACS 将令牌返回给客户端。我想将该令牌存储在客户端上,以便在第 3 步中使用。
- 用户登录后,我想让客户端对服务层进行基于 REST 的调用,并在每个请求的标头中传递 Microsoft 帐户/ACS 用户令牌,为此完全绕过 UI 层第二次服务请求。服务层将对每个请求的用户进行身份验证。
- 客户端将通过重定向到登录页面或显示结果来处理来自服务层的响应代码(200、401 等)。
我不确定第 2 步。客户端浏览器如何从 ACS 检索令牌以传递给服务层?
我基本上想做 Vittorio 描述的 here,但我想使用 MVC4 网络应用程序而不是 Windows 8 商店应用程序。
【问题讨论】:
-
谢谢瑞克和肖恩。我能够使用 Rick 提供给 Vittorio 博客的链接获得一个 sln。我想修改此 sln 以使用管理门户中的 ReturnURL 指向的控制器操作,以将令牌存储为 cookie。然后,我会向 svc 层发出 AJAX 请求,将存储在 cookie 中的令牌附加到每个请求的标头中。我遇到的问题是该操作在登录时没有被重定向到。我已经使用 ReturnURL 更新了 mgmt 门户,并使用“身份和访问”工具刷新了 web.config。我还缺少其他东西吗?
-
登录后fiddler显示客户端被定向到/Login/Return,但是响应码是302,位置为/。然后主页加载。登录控制器中的返回操作永远不会被命中,并且登录控制器中的返回操作生成的 cookie 之后不会出现在客户端上。但是,如果我直接在登录控制器上点击返回操作,则会创建 cookie。
标签: authentication azure acs