9

构建一个也需要 API 的网站,因此(可能)OAuth 支持登录我怀疑如何处理他的用户和身份验证部分。

所以我有一个带有 RavenDB 的 ASP.NET MC4 应用程序。

最好的方法是什么?

  • 要使用 RavenDB 的成员资格提供程序之一并在 API 部分中单独处理 Oauth?前任。格里芬的解决方案在这里

  • 或者制作一个自定义解决方案,重新实现会员废话并支持 OAuth。

我真的不知道从哪里开始,任何关于如何做到这一点的建议表示赞赏。

4

2 回答 2

10

在此处输入图像描述

** Clicky-click 获取 GitHub 项目**

IMO,忘记存储用户名和密码。那是疯话!让人们使用他们的 Facebook、Google 或 Twitter 凭据登录。这是普通网站的 80%。

身份验证和存储凭据是 IMO 的两个不同任务。例如,我不在乎您在哪里进行身份验证..一旦您这样做了..我不在乎您如何存储该数据:)

就个人而言,我会将其存储在 RavenDb 中……但这是我个人的选择。

因此-> 将这两个任务分开是(IMO)至关重要的。

在此处输入图像描述

所以让我们看一些codez ....

public ActionResult AuthenticateCallback(string providerKey)
{
    // SNIP SNIP SNIP SNIP

    var model = new AuthenticateCallbackViewModel();
    try
    {
        // SNIP SNIP SNIP SNIP

        // Complete the authentication process by retrieving the UserInformation from the provider.
        model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString());


        // Create a new user account or update an existing account.
        // Whatever you end up doing, this is the part u want to
        // pass this data to your repository (eg. RavenDb, Sql Server, etc)
        // I'll use RavenDb in this example...
        // And yes .. this is a contrite example. U might want to check for
        // existing email or id or whatever u need to do, etc.
        var myUser = Mapper.Map(model.AuthenticatedClient);
        session.Store(myUser);
        session.SaveChanges();

        // SNIP SNIP SNIP SNIP
    }
    catch (Exception exception)
    {
        model.Exception = exception;
    }

    return View(model);
}

所以让我们看看我做了什么。我已经剪掉了任何冗长的东西(值检查等),这只是这个 SO 答案中的噪音。

首先,我处理 Authenticate 回调。例如。我刚刚去了 Facebook,它说'是的!你是你' .. 它又回到了我的网站,我要求它给我一些数据。

接下来......我们从 Facebook 获得了一些数据......但这可能不是我们想要在 RavenDb 中放入的格式。因此,我将其从旧格式转换为新的 ShineyUser类,这就是您将保留在 Db 中的内容。

第三 - 我将它存储在数据库中。 这是您可以执行任何自定义数据库逻辑的地方

而已。

模块化的东西

结束。

现在对不起..距离《天启》还有几个小时。我必须做好自己的准备。

于 2012-12-21T05:38:54.980 回答
0

出色地。会员提供商很臃肿。如果您不打算使用其中的功能而只使用 OAuth,我不会使用它们。不幸的是,MVC4 中提供的 SimpleMembership 和 oath 提供程序更加混乱。

所以你的选择是:

  1. 使用 SimpleMembership
  2. 内置的 OAuth 支持
  3. 使用自定义成员资格提供程序
  4. 使用自定义 oauth 提供程序

如果您打算坚持 #3,我建议您使用我的(在 Griffin.MvcContrib 中)。建立会员服务提供商并非易事。

至于 oauth,您有一个解决方案,例如:https ://github.com/rafek/SimpleSocialAuth

于 2012-12-20T16:29:18.990 回答