Asp.net mvc 5 自定义ASP.NET身份、OWIN和社交提供商登录

Asp.net mvc 5 自定义ASP.NET身份、OWIN和社交提供商登录,asp.net-mvc-5,asp.net-identity,owin,Asp.net Mvc 5,Asp.net Identity,Owin,我不熟悉ASP.NETMVC5和OWIN 我已经将我的项目升级到MVC5,以实现我的项目的身份验证和授权。问题是我的项目没有存储用户数据。当用户登录时,我通过WCF服务请求其他系统告诉我该用户是否经过身份验证。因此,我没有存储用户的数据库或表 但我想添加使用OWIN通过社交提供商登录的功能。为此,我将添加一个本地数据库表来存储社交提供者Id/令牌 环顾四周,其他人也提出了类似的问题,但只有当他们想更改数据库类型存储时。。。虽然我实际上没有存储数据。。。是否仍然可以使用ASP.NET标识对此进行自

我不熟悉ASP.NETMVC5和OWIN

我已经将我的项目升级到MVC5,以实现我的项目的身份验证和授权。问题是我的项目没有存储用户数据。当用户登录时,我通过WCF服务请求其他系统告诉我该用户是否经过身份验证。因此,我没有存储用户的数据库或表

但我想添加使用OWIN通过社交提供商登录的功能。为此,我将添加一个本地数据库表来存储社交提供者Id/令牌


环顾四周,其他人也提出了类似的问题,但只有当他们想更改数据库类型存储时。。。虽然我实际上没有存储数据。。。是否仍然可以使用ASP.NET标识对此进行自定义?我将如何进行自定义?

我建议创建一个连接到wcf服务的自定义IUserStore


如果您不想实现自己的IUserStore,您仍然可以使用内置的默认基于EF的UserStore,只需使用外部登录API即可。数据库架构将有一组始终为空的列,如PasswordHash等,但您关心的操作仍然可以正常工作:

CreateAsync(TUser) - Create a user
AddLoginAsync(userId, UserLoginInfo) - Associate an external login
FindAsync(UserLoginInfo) - Return the user with the associated external login

您必须提供UserStore并将其传递给UserManager,如果您已经在默认mvc5项目中使用entityframework,则可以编写从Microsoft.AspNet.Identity.entityframework.UserStore继承的CustomUserStore,并覆盖Microsoft.AspNet.Identity.entityframework.IUserLoginStore中定义的方法:

public interface IUserLoginStore<TUser, in TKey> : IUserStore<TUser, TKey>, IDisposable where TUser : class, Microsoft.AspNet.Identity.IUser<TKey>
{
   Task AddLoginAsync(TUser user, UserLoginInfo login);
   Task<TUser> FindAsync(UserLoginInfo login);
   Task<Collections.Generic.IList<UserLoginInfo>> GetLoginsAsync(TUser user);
   Task RemoveLoginAsync(TUser user, UserLoginInfo login);
}
public interface IUserLoginStore:IUserStore,IDisposable where TUser:class,Microsoft.AspNet.Identity.IUser
{
任务AddLoginAsync(TUser用户,UserLoginInfo登录);
任务FindAsync(用户登录信息登录);
任务GetLoginsAsync(TUser用户);
任务RemoveLoginAsync(TUser用户、UserLoginInfo登录);
}
如果不使用entityframework,则必须提供自己访问数据库的方式,方法是编写一个UserStore,实现IUserStore、IUserLoginStore、IUserClaimStore、IUserRoleStore、IUserPasswordStore、IUserSecurityStampStore(取决于您的需要,但至少需要IUserStore和IUserLoginStore,因为IUserStore是必需的,IUserLoginStore是您要添加的)

所有这些接口都位于Microsoft.AspNet.Identity命名空间中

如何实现自定义MySQL ASP.NET身份存储提供程序和
如何使用简洁的ORM而不是EntityFramWork。

我研究了建议的解决方案。我发现要实现的接口的方法名称并不合适,而且还有太多的方法

我最终只使用AccountController中的OWIN上下文来提取包含我想要的所有详细信息的登录信息。这样我就不必实现任何自定义版本的IUserLoginStore等

我想要实现最简单的解决方案,因此我最终得到了: 1.从模板mvc项目中添加了StartupAuth类,并在其中配置了不同的提供程序 1.在AccountController中:从LoginInfo中提取索赔, 2.将OpenId存储在表中进行查找,然后像以前一样继续