如何为asp.net mvc5实现office 365 sso和google apps sso?

时间:2014-04-01 06:02:25

标签: asp.net-mvc single-sign-on google-apps asp.net-identity office365

我们正在尝试构建一个ASP.NET MVC 5 Web应用程序,其中有两种类型的用户可以登录。我们有一些客户使用Google应用程序而其他人使用Office 365.我们已经知道哪个客户端使用什么服务。< / p>

用户登录我们网站的方式如下:

  1. 用户会看到一个页面,用户必须从下拉列表中选择公司名称。
  2. 根据用户选择的公司名称,他/她应该被重定向到该特定的SSO登录页面。
  3. 验证后,用户应返回我们的网站,并被视为已通过身份验证。
  4. 根据他们使用的服务,我们还计划利用他们的api,如Calender,Notes等。

    我搜索了很多,但在这方面没有发现/无关紧要。请帮忙。

2 个答案:

答案 0 :(得分:3)

如果你想自己实现这个,这里有一些我的经验提示:

  • Office365(基于Windows Azure Active Directory):使用SAML令牌说出一个名为Ws-Federation的协议。到目前为止,有各种平台和语言的库。

  • Google Apps对Office365更容易,因为您必须使用普通的Google OAuth。可能对您有所帮助的一点是,您可以在使用querystring参数&#34; hd&#34;进行身份验证时强制使用Google Apps域。喜欢&#34;?hd = x.com&#34;。请参阅此answer and the comments

你要做的事情并非不可能,但它需要一些工作并理解所有协议。

另一个选择是使用Auth0之类的身份验证代理。您的应用程序将auth0视为OAuth提供商,您可以从仪表板或API连接到客户 Google Apps Office 365 ,这意味着您可以轻松地自动执行以下操作 - 寄宿客户。创建连接后,Auth0将为您提供您需要提供给客户的链接,以便他们可以同意您的应用程序使用其目录。从客户端的角度来看,您可以使用auth0.js实现您描述的组合框UI,如下所示:

var auth0 = new Auth0({
  //settings provide by auth0
});

var combo = $('#company-combo');

//loads the company combobox directly from auth0
auth0.getConnections(function (err, connections) {
  connections.forEach(function (c) {
    $('<option>')
      .attr('value', c.name)
      .text(c.name)
      .appendTo(combo);
  })
});

//trigger login
$('.login').on('click', function (e) {
  auth0.login({
    connection: $("option:selected", combo).val()
  })
});

用户登录后,您的应用程序将获得profile。此配置文件具有指示连接/公司的属性。

Auth0还为查询/搜索用户提供了统一的API,在这两种情况下,它使用基础目录,但您再次获得相同的配置文件表示。

免责声明:我为Auth0工作。

答案 1 :(得分:0)

您可以将Windows Azure Active Directory ACS用作代理。来自MSDN:Windows Azure Active Directory访问控制(也称为访问控制服务或ACS)是一种基于云的服务,提供了一种简单的方法来验证和授权用户访问您的Web应用程序和服务,同时允许身份验证功能和授权从您的代码中分解出来。您可以让ACS协调身份验证以及用户的大部分授权,而不是使用特定于您的应用程序的用户帐户来实现身份验证系统。 ACS集成了基于标准的身份提供商,包括企业目录(如Active Directory)和Web身份(如Windows Live ID(Microsoft帐户),Google,Yahoo!和Facebook)。

blog提供了有关如何设置ACS的详细信息。

这个article解释了如何在ASP.NET MVC中使用ACS。