【问题标题】:OAuthWebSecurity create account - how does it work?OAuthWebSecurity 创建帐户 - 它是如何工作的?
【发布时间】:2013-01-28 07:15:23
【问题描述】:

我对以下行感到困惑和担心,因为 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 像这样存储本地值。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 dotnetopenauth


    【解决方案1】:

    它使用SimpleMembershipProvider 这是 ASP.NET MVC 4 中的默认提供程序来创建或更新公共提供程序用户 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);
            }
        }
    }
    

    【讨论】:

    • 太疯狂了>.
    • 当然有。如果您不喜欢默认的内置功能,请随意直接使用 DotNetOpenAuth 库或编写自定义会员提供程序。
    • 查看 MS 推出的 Universal Providers 1.2 库——它应该更容易解耦。
    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2012-03-20
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多