使用Asp.Net,RavenDB和OAuth支持进行身份验证

esb*_*enr 9 api membership-provider ravendb oauth-2.0 asp.net-mvc-4

建立一个也需要API的网站,因此(可能)OAuth支持登录我对如何处理用户和身份验证部分存在疑问.

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

什么是最好的方法?

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

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

我不确定从哪里开始,对于如何做到这一点的任何建议表示赞赏.

Pur*_*ome 10

在此输入图像描述

**点击进入da GitHub项目**

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

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

就个人而言,我会把它存放在RavenDb中..但这是我个人的选择.

因此 - >保持这两个任务分离是(IMO)至关重要的.

在此输入图像描述

那么让我们来看看一些代码 ....

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);
}
Run Code Online (Sandbox Code Playgroud)

那么让我们来看看我做了什么.我已经删除了任何冗长的东西(价值检查等),这些只是这个SO答案中的噪音.

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

接下来......我们从Facebook获得了一些数据..但这可能不是我们想要的格式,在RavenDb中.所以我将它从旧格式转换为新的光泽User类,这是你将坚持你的Db.

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

而已.

MODULARIZETHATSHIT

结束.

现在请原谅..在启示录前还有几个小时的时间.我必须做好准备.

  • @esbenr要使用`[Authorize]`等属性..你**不要**(我重复,**不要**)需要使用ASP.NET Membership系统.**请不要在任何情况下使用它(**为1000000理由).要利用`[Authorize]`等等,你只需要在`IPrincipal`和`IIdentity`中存储使用信息(是的,2x我).只需创建一个新的`GenericPrincipal`,然后添加一个新的`GenericIdentity`.谷歌为那些更多的代码:) (2认同)