【发布时间】:2016-06-27 16:47:02
【问题描述】:
TL;DR:我想做一个 Moodle 安装和一个基于 ASP.NET Identity 的站点共享身份验证。如果他们只有一个登录页面,那就更好了,但是登录一个页面应该会自动登录另一个页面;注销也应该共享。
我在 www.example.com/moodle 有一个 Moodle 安装 (M),在 有另一个网站 (O) >www.example.com。
- O 是使用 .NET 4.5.2 编写的,并且具有需要身份验证才能访问的区域,并使用带有自定义用户模型的 ASP.NET Identity 2.1 进行管理。这个模型不是特别复杂。它本质上是开箱即用的模型,但使用的是整数 ID 而不是 GUID。
- M 是 2.6 版本,打算在不久的将来升级到最新版本(目前是 3.1)。
- 两者都可以通过公共互联网访问;无需在专用网络上即可访问它们。
- 我知道没有将 M 或 O 移至其他域的计划。但是,如果一个或两个要移动,我想他们会移动到 example.com 的子域。
我想创建一个单点登录系统,允许登录 M 也让用户登录到 O。就目前而言,我正在使用 Moodle 的外部数据库身份验证插件,M 指的是 O 的数据库。虽然这可行,但它确实需要用户登录两次。我想进行设置,以便登录到 M 或 O 的用户也会登录到其他站点。
- 我能够从 PHP 和 .NET 代码创建匹配的哈希值。除非它与解决方案特别相关,否则请考虑创建超出范围的哈希。
- M 的一些用户正在使用 Moodle 的内置身份验证。但是,除非它与解决方案特别相关,否则请考虑将用户迁移超出范围。
- 如果可能的话,我更喜欢 O 来管理用户。 M,本质上是 Moodle,必须为用户拥有自己的记录,但我希望它们与外部数据库插件使用的记录相似:只是说用户存在并且可以在其他地方找到。
我尝试过、调查过或考虑过的事情:
- Moodle 的外部数据库插件。这就是它目前的工作方式。它有点工作,但需要多次登录。
- 自动进行多次登录。我已经尝试使用发布的凭据,在登录时从服务器向站点各自的登录表单发出 HTTP 请求,将 cookie 从响应中取出,然后将该 cookie 发送回客户端。这也有效,但它充其量是笨重的,并且依赖于 cookie 不会不同步。
- 使用 PHP 的 DOTNET 库并做...一些事情。我能找到的所有文档都说 DOTNET 不能与 .NET 2.0、3.0 或 3.5 以外的任何东西一起使用。我使用的是 4.5.2,所以这似乎是不行的。即使我可以让它与更新版本的 .NET 一起使用,我也不知道该怎么办。
- 不知何故让 Moodle 接受 ASP.NET 身份 cookie 来代替它自己的。这似乎是最有成效的课程,因为它需要管理一个 cookie。
总结:我想让 M 和 O 共享身份验证。如果他们只有一个登录页面,那就更好了,但是登录一个页面应该会自动登录另一个页面;注销也应该共享。这可能吗,有人知道我应该怎么做吗?
【问题讨论】:
标签: single-sign-on asp.net-identity moodle