我有一个需要用户身份的网站,我真的不想让他们创建另一个他们必须记住的用户名/密码组合
是否有允许从 Microsoft 帐户进行身份验证的 SDK?
我有一个需要用户身份的网站,我真的不想让他们创建另一个他们必须记住的用户名/密码组合
是否有允许从 Microsoft 帐户进行身份验证的 SDK?
这相当简单,因为 ASP.NET 4.5 网站的默认空模板显示了如何使用 google/facebook/liveid/twitter 进行 OAuth2 身份验证。
http://www.asp.net/aspnet/overview/aspnet-45/oauth-in-the-default-aspnet-45-templates
查看 Principal Context 类。您可以使用 localhost(机器)或域上下文创建它,并使用 ValidateCrentials(string username, string password) 方法使用 Windows 凭据进行身份验证。
http://msdn.microsoft.com/en-us/library/bb154889.aspx
这是我在我的网站中使用它的方式。(把它放在您的身份验证控制器或其他东西的 POST 方法中)
下面的代码将使用用户名“bob”或“localhost\bob”或“DOMAIN\bob”等,并获取正确的 PrincipalContext 来验证用户。注意:这里不区分大小写。
public bool ValidateCredentials(string username, System.Security.SecureString password)
{
string domain = Environment.MachineName;
if (username.Contains("\\"))
{
domain = username.Split('\\')[0];
username = username.Split('\\')[1];
}
if (domain.Equals("localhost", StringComparison.CurrentCultureIgnoreCase))
domain = Environment.MachineName;
if (domain.Equals(Environment.MachineName, StringComparison.CurrentCultureIgnoreCase))
using (PrincipalContext context = new PrincipalContext(ContextType.Machine))
{
return context.ValidateCredentials(username, password.ToUnsecureString());
}
else
using(PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
//return context.ValidateCredentials(domain + "\\" + username, password.ToUnsecureString());
return context.ValidateCredentials(username, password.ToUnsecureString());
}
}
Microsoft 提供Live Connect SDK,用于将 Microsoft 服务集成到您的应用程序中,包括 Microsoft 帐户身份提供程序。
有一个关于服务器端场景的具体示例,它应该涵盖您需要进行集成的所有内容。
您的意思是来自活动目录 Windows 帐户吗?如果是这样,您可以使用 Windows 身份验证并让索引页面自动登录。
http://msdn.microsoft.com/en-us/library/ff647405.aspx
在您的代码隐藏文件中使用以下命令来获取登录的相关信息:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
User.Identity.IsAuthenticated
User.Identity.AuthenticationType
User.Identity.Name
来自微软的大量更改/品牌重塑/弃用/死链接让我发疯。无论如何,我发现的最新版本是“Microsoft 帐户外部登录”,可以首先在Microsoft Developer Portal上进行设置。
我在https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins找到了解释如何为 .Net Core 执行此操作的指南,尽管前半部分(例如设置重定向 URI)不是特定于框架的。
我还在https://github.com/aspnet/Security/blob/master/src/Microsoft.AspNetCore.Authentication.MicrosoftAccount/MicrosoftAccountOptions.cs找到了一些 .Net Core 的相关源代码,其中显示了一些声明(用户详细信息)检索到:
ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
ClaimActions.MapJsonKey(ClaimTypes.Name, "displayName");
ClaimActions.MapJsonKey(ClaimTypes.GivenName, "givenName");
ClaimActions.MapJsonKey(ClaimTypes.Surname, "surname");
ClaimActions.MapCustomJson(ClaimTypes.Email,
user => user.Value<string>("mail") ?? user.Value<string>("userPrincipalName"));
最新版本的 .Net Core 的支持向我表明,这个外部登录 API 仍然有效。我还没有对它们进行测试,如果我可以进行登录集成,我会更新。