gpt4 book ai didi

c# - SignInManager,它是什么以及如何使用,何时使用?

转载 作者:IT王子 更新时间:2023-10-29 03:55:33 26 4
gpt4 key购买 nike

我正在探索 SignInManager 类。但是MSDN上给出的信息是非常无用的。它只说明提供的方法和属性是什么。
我正在寻找的是,

  • 什么是登录管理器?
  • 如何使用它?
  • 我有自己的数据库,其中包含与凭据相关的信息(用户名和密码)

  • 如何使用 SignInmanager 以及如何使用它以便我的自定义数据库用于对用户进行身份验证?
    我正在使用 asp.net MVC 5 和 Visual Studio 2015。在我的示例项目中,我有包含操作方法的帐户 Controller ,例如
      public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    但我不知道如何使用它,MSDN 完全没有提供这方面的信息。任何详细解释它的有用链接,因为我不知道 SignInManager 是什么以及它的用途。
    谢谢

    最佳答案

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

    cookies

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

    登录管理员

    类声明如下:

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

    所以你可以使用任何类作为你的用户,只要它实现了 IUser<TKey>界面。或使用 IdentityUser如果你从头开始,作为你的基础,它实现了 IUser<string> .过去,我试图创建一个使用 int 的实现。如 TKey ,但在花了相当长的时间试图让它工作并且没有看到任何进展后放弃了尝试。

    密码登录
    SignInManager.SignInAsync方法立即为指定用户发布应用程序 cookie,无需任何检查,因此,如果您实现任何自定义身份验证逻辑,您可能希望使用它(默认 ASP.NET MVC 模板在注册用户后使用它,因此他们不必进行身份验证注册后)。
    SignInManager.PasswordSignInAsync给定用户名和密码,检查它们的有效性,如果正确则发出应用程序 cookie。

    外部登录

    与其让用户专门为您的站点创建登录名和密码,您可能希望他们使用某个外部网站进行身份验证并将身份验证信息通过 OAuth 传递给您。

    Asp.Net Identity 有 User 的概念和 Login ,其中 User是...好吧,用户(一个人),还有 LoginUser 的凭证验证。 User可能有多个 Login s。

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

  • 自定义存储

    到目前为止,我没有成功为 Asp.Net Identity 创建自定义存储。它通常涉及实现您自己的用户管理器类,从 UserManager<TUser, TKey> 降序。和存储类实现一堆接口(interface),如 IUserStore<TUser, TKey> , IUserRoleStore<TUser, TKey> , 等等。

    关于c# - SignInManager,它是什么以及如何使用,何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451636/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com