如何使用Windows Azure Access Control“预身份验证”其他用户?

时间:2013-09-06 23:50:25

标签: azure oauth wif acs azure-acs

我正在尝试使用Windows Azure Access Control来避免在我的应用中使用用户名/密码的安全风险,并简化身份验证。但是,这是一个可供希望“预先验证”用户的中型或大型公司使用的站点。换句话说,他们可能希望通过在用户通过Azure ACS登录之前插入用户的Windows Live ID并自动创建帐户来批量创建用户。我可以通过向该用户发送一封带有一次性使用页面链接的电子邮件来创建他们的帐户来实现这一目标,但我希望能够做一些更加无缝的事情。

我想要做的是等同于Team Foundation Service(* .visualstudio.com)如何通过放入他们的Windows Live ID来允许您将用户添加到团队项目中,一旦他们这样做,他们就可以登录访问项目,即使该用户以前从未登录过TFS。

我不明白如何使用ACS和System.IdentityModel来做到这一点。我可以使用nameidentifier声明来唯一标识用户,但如何通过给定的提供者为另一个用户获取nameidentifier?

如果我不能很好地解释这一点,我很抱歉,所以请随时提问。

1 个答案:

答案 0 :(得分:2)

不是真正的答案,只是想分享我对这个问题的想法。

ACS和Windows Live身份验证的问题是ACS永远不会返回用户的电子邮件地址。我们从ACS返回的所有内容都是一个令牌,告诉我用户已通过身份验证。此令牌是基于您的ACS领域创建的(即,如果您更改ACS领域,ACS将为同一用户创建新令牌)。同样,使用您的应用程序的公司的管理员可以输入用户的电子邮件地址,但是无法从ACS获取该电子邮件地址。

大声思考:),你可以做一些事情:

  1. 您使用ACS对用户进行身份验证,然后使用Windows Live REST API通过ACS发送的令牌获取有关用户的更多详细信息。通过使用Windows Live REST API,您可以获得有关用户的更多详细信息,如姓名,电子邮件地址等。或者您只能使用Windows Live API来验证用户身份。我不是百分百肯定,但我认为这就是Team Foundation Service的作用。请查看http://zud.io,因为它使用Windows Live API。
  2. 另一个想法是创建某种邀请令牌。在这种方法中,管理员将“邀请”人们。他们将通过提供用户的姓名,电子邮件地址来创建邀请记录,并且应用程序将创建唯一的邀请令牌。然后,应用程序可以创建一个邀请链接,用户可以使用该链接访问您的应用程序并验证自己。身份验证完成后,您可以查找邀请记录并从数据库中检索用户信息并创建用户记录并将身份验证令牌与用户记录相关联。此方法的问题是用户可能不使用管理员提供的相同Live ID。例如,我有至少3个活动ID,如果我有这个邀请链接,我可以使用任何这些活动ID签名,应用程序将无法阻止我注册。
  3. 另一个想法是使用Windows Azure Active Directory(WAAD)而不是ACS。您可以在应用程序中使用Graph API来为您的客户创建新用户。您仍然没有像WAAD那样管理用户名和密码。我能想到的两个问题是:a)作为最终用户,我必须记住另外一个用户名/密码组合,并且b)在登录时,我必须在myusername@yourtenantname.onmicrosoft.com中提供我的凭据,以便我个人很麻烦。
  4. 我们也经历过同样的痛苦,现在我们决定采用方法#2。

    希望这有帮助。