OAuthWebSecurity创建帐户 - 它是如何工作的
本文关键字:何工作 工作 创建 OAuthWebSecurity | 更新日期: 2023-09-27 17:56:12
我对以下行感到困惑和关注,因为OAuthWebSecurity的API似乎有自己的身份验证存储。
// If the current user is logged in add the new account
OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
如果我正确阅读了上述内容,它似乎表明 API 在本地保存关系。
请告诉我情况并非如此,并解释它到底有什么作用?我需要我的 Web 应用程序尽可能无状态,我不能让 API 像这样存储本地值。
它使用 SimpleMembershipProvider
(MVC 4 中的默认提供程序 ASP.NET 来创建或更新公共提供程序用户 ID 与本地用户之间的关联。基本上,它会将一条记录添加到webpages_OAuthMembership
表中。
下面是被调用的WebSecurity.CreateOrUpdateOAuthAccount
中的相应代码:
public override void CreateOrUpdateOAuthAccount(string provider, string providerUserId, string userName)
{
this.VerifyInitialized();
if (userName.IsEmpty())
{
throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError);
}
int userId = this.GetUserId(userName);
if (userId == -1)
{
throw new MembershipCreateUserException(MembershipCreateStatus.InvalidUserName);
}
int userIdFromOAuth = this.GetUserIdFromOAuth(provider, providerUserId);
using (IDatabase database = this.ConnectToDatabase())
{
if (userIdFromOAuth == -1)
{
if (database.Execute("INSERT INTO [" + OAuthMembershipTableName + "] (Provider, ProviderUserId, UserId) VALUES (@0, @1, @2)", new object[] { provider, providerUserId, userId }) != 1)
{
throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError);
}
}
else if (database.Execute("UPDATE [" + OAuthMembershipTableName + "] SET UserId = @2 WHERE UPPER(Provider)=@0 AND UPPER(ProviderUserId)=@1", new object[] { provider, providerUserId, userId }) != 1)
{
throw new MembershipCreateUserException(MembershipCreateStatus.ProviderError);
}
}
}