我正在探索SignInManager类.但MSDN上提供的信息非常无用.它只说明提供的方法和属性.
我要找的是,
1)什么是SignInManager?2)如何使用它?3)我有自己的数据库,其中包含凭据相关信息(用户名和密码)
我如何使用SignInmanager以及如何使用它,以便我的自定义数据库用于验证用户?
我使用的是asp.net MVC 5和Visual Studio 2015.在我的示例项目中,我有一个包含操作方法的帐户控制器
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用它,MSDN完全没用提供这方面的信息.任何有用的链接都会详细解释它,因为我不知道SignInManager是什么以及它的用途.
谢谢
我在Windows Azure Active Directory中配置了我的第一个应用程序,一切正常:我可以使用我的目录中的帐户登录.
但是,我还没有完全清楚所有的概念,尤其是登录网址.工具提示说:
用户可以登录并使用您的应用的网址.您可以稍后更改.
但是用户在某处登录,login.windows.net而且,无论我在这里输入什么,身份验证都会继续工作.那么这个'登录网址'是什么?

我正在使用ASP.NET身份与几个外部登录提供程序,我需要处理以下方案:
1)用户使用外部服务登录(假设它是Facebook),应用程序从Facebook获取一些信息(姓名,电子邮件,出生日期等等).包含此信息的声明被添加到身份.
2)对于以下场景,我需要将此信息存储在应用程序Db中:
管理员浏览已注册用户的列表
电子邮件订阅服务将使用名字和姓氏
问题是如果用户将更新他/她的Facebook个人资料(例如,更改电子邮件地址) - 在这种情况下我需要更新我的Db中的信息(我在AspNetUserClaims表中存储外部声明).实际上,每次外部用户通过身份验证时我都需要更新它.
这是第一次如何保存它的代码:
扩展索赔类:
public class ApplicationUserClaim : IdentityUserClaim<Guid>
{
public string Issuer { get; set; }
public string ClaimValueType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
启动:
var facebookOptions = new FacebookAuthenticationOptions {
AppId = "...",
AppSecret = "...",
Provider = new FacebookAuthenticationProvider {
OnAuthenticated = (context) => {
context.Identity.AddClaims(new[] {
new Claim("LastName", context.User["last_name"].ToString(), ClaimValueTypes.String, "Facebook"),
new Claim("FirstName", context.User["first_name"].ToString(), ClaimValueTypes.String, "Facebook"),
//...Other claims
});
}
}
};
facebookOptions.Scope.Add("email");
facebookOptions.Scope.Add("user_birthday");
app.UseFacebookAuthentication(facebookOptions);
Run Code Online (Sandbox Code Playgroud)
AuthController
外部登录回调:
public ActionResult …Run Code Online (Sandbox Code Playgroud) 我是一个stackoverflow noob,所以如果我做错了,请放轻松.
我正在使用带有默认核心身份模板(本地帐户)的asp.net核心.
我已经加入了如何在本地登录时向用户主体添加声明的方式
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model)
{
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var user = await _userManager.FindByNameAsync(model.Email);
await _userManager.AddClaimAsync(user, new Claim("your-claim", "your-value"));
Run Code Online (Sandbox Code Playgroud)
我已经弄清楚如何从外部登录返回索赔但我无法弄清楚如何在ExternalLoginCallback函数中创建用户主体之前添加这些索引
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
if (remoteError != null)
{
ModelState.AddModelError(string.Empty, $"Error from external provider: {remoteError}");
return View(nameof(Login));
}
var info = await _signInManager.GetExternalLoginInfoAsync();
if …Run Code Online (Sandbox Code Playgroud) asp.net authentication cookies claims-based-identity asp.net-identity-2
我已经使用个人用户帐户创建了默认的 ASP Net Core MVC Web 应用程序。我向 AspNetUsers 表添加了一个自定义 UserID INT 字段,并将其作为外键链接到所有其他自定义表,以便我可以跟踪用户在数据库中插入/更新的记录。我这样做是因为我更喜欢使用 INT 字段作为主键。在这种情况下,一切正常。
我现在正在考虑使用外部身份提供程序,例如 Azure Active Directory,但是我无法弄清楚如何将 Azure AD(或任何其他身份提供程序)中的用户链接到我的本地数据库表以维护用户 ID 外键约束。从我所有的研究中,我找不到任何关于这种情况的文章。
如何将外部身份提供商的用户信息链接到我的本地数据库表?我担心我可能需要在外部身份提供程序和本地 AspNet 用户表中双重处理用户帐户管理,以使用其他自定义表维护外键,这看起来很疯狂。
也许我遗漏了一些明显的东西,或者我的方法都是错误的,所以如果有更好的替代方案来跟踪谁在使用外部身份提供程序的 ASP Net Core Web 应用程序的数据库表中做了什么,我会很乐意采用它。
authentication azure-active-directory asp.net-core-mvc asp.net-core-identity