SignInManager,它是什么以及如何使用?

我正在探索SignInManager类。 但MSDN上提供的信息非常无用。 它只告诉提供的方法和属性。

我在寻找的是,

1)什么是SignInManager? 2)如何使用它? 3)我有自己的数据库,其中包含凭据相关信息(用户名和密码)

我如何使用SignInmanager以及如何使用它,以便我的自定义数据库用于validation用户?

我正在使用asp.net MVC 5和Visual Studio 2015.在我的示例项目中,我有包含操作方法的帐户控制器

public async Task ExternalLoginCallback(string returnUrl) 

但我不知道如何使用它,MSDN完全无用提供这方面的信息。 任何有用的链接都会详细解释它,因为我不知道SignInManager是什么以及它的用途。

谢谢

免责声明:我对ASP.NET身份中使用的模型感到困惑,我说的是我对事物的理解,这可能是不准确的(我可能也会说明显事,所以我道歉)。 另外,我最近玩的是Asp.Net Core的身份,与Asp.Net 4相比略有不同,所以我可能会混淆。

cookies

ASP.NET标识使用两种cookie:应用程序cookie和外部cookie。 应用程序cookie包含您的应用程序的标识,并由登录管理器发布。 外部cookie包含外部身份validation提供者身份,由身份validation中间件(例如FacebookAuthenticationMiddleware )发布。 您使用登录管理器来使用外部cookie并发出应用程序cookie。 如果您不使用外部身份validation,则不会处理外部cookie。

登录经理

类声明如下:

 public class SignInManager : IDisposable where TUser : class, IUser where TKey : IEquatable 

因此,只要它实现了IUser接口,您就可以使用任何类作为您的用户。 或者,如果从头开始实现IUser ,请使用IdentityUser作为基础。 在过去,我尝试创建一个使用int作为TKey ,但是在花了很长时间尝试使其工作并且没有看到任何进展后放弃了尝试。

密码登录

SignInManager.SignInAsync方法立即为指定用户发出应用程序cookie而不进行任何检查,因此如果您实现任何自定义身份validation逻辑,您可能希望使用它(默认的asp.net MVC模板在注册用户后使用它,因此他们没有在注册后立即进行身份validation)。

SignInManager.PasswordSignInAsync给定用户名和密码检查其有效性并发出应用程序cookie,如果它们是正确的。

外部登录

您可能希望他们使用某些外部网站进行身份validation,并使用OAuth将身份validation信息传递给您,而不是让用户专门为您的网站创建登录名和密码。

Asp.Net Identity具有UserLogin概念,其中User是用户(一个人),而LoginUser身份validation的凭据。 User可能有多个Login

从Asp.Net网站看到的OAuth流程如下所示(基于VS模板生成的默认日志流程):

  1. 您设置了您愿意接受的外部身份validation提供程序(身份validation中间件)(这可能涉及在外部网站上注册。例如,为了使用Facebook身份validation,您需要创建Facebook应用程序,在那里设置返回URL以指向您的网站并配置FacebookAuthenticationMiddlewareFacebookAuthenticationMiddleware提供的应用程序ID和应用程序秘密)。
  2. 您可以向未经身份validation的用户提供您支持的外部提供商选项。
  3. 用户选择提供商,选择将发送到您的Asp.Net Web应用程序
  4. Web应用程序发出一个ChallengeResult其中包含要使用的提供程序的名称(这通常发生在AccountController.ExternalLogin ),返回URL设置为调用AccountController.ExternalLoginCallback并且最终保存的实际返回URL用户将保存以供日后使用。
  5. 适当的中间件捕获ChallengeResult对象并将其转换为HTTP重定向响应,该响应导致用户的浏览器转到询问用户凭据的第三方网站。
  6. 成功进行身份validation后,第三方网站会将用户重新定向回您的网站,并将其重定向到由身份validation中间件制作的特定URL(对于Facebook,它/signin-facebook IIRC)。
  7. 身份validation中间件拦截此调用,validation第三方网站传递的数据,如果一切正常,则发出外部cookie ,并将您重定向到步骤4中设置为返回URL的任何内容(应为AccountController.ExternalLoginCallback )。
  8. AccountController.ExternalLoginCallback您需要使用外部cookie并发出应用程序cookie。 这就是SignInManager.ExternalSignInAsync作用:给定登录信息,它试图找到具有该Login用户。 如果找到,则发出应用程序cookie; 如果没有,它会通知您,当您收到未知的Login时,您应该按照您认为正确的方式进行操作(通常,此时您将创建新用户。此时VS模板的默认实现会询问其他信息并在AccountController.ExternalLoginConfirmation创建用户AccountController.ExternalLoginConfirmation )。 之后,用户被重定向到第4步中“保存以供日后使用”的实际返回URL。

定制存储

到目前为止,我一直没有成功为Asp.Net Identity创建自定义存储。 它通常涉及实现您自己的用户管理器类,下降UserManager和实现一堆接口的存储类,如IUserStoreIUserRoleStore等。