构建一个也需要 API 的网站,因此(可能)OAuth 支持登录我怀疑如何处理他的用户和身份验证部分。
所以我有一个带有 RavenDB 的 ASP.NET MC4 应用程序。
最好的方法是什么?
要使用 RavenDB 的成员资格提供程序之一并在 API 部分中单独处理 Oauth?前任。格里芬的解决方案在这里。
或者制作一个自定义解决方案,重新实现会员废话并支持 OAuth。
我真的不知道从哪里开始,任何关于如何做到这一点的建议表示赞赏。
构建一个也需要 API 的网站,因此(可能)OAuth 支持登录我怀疑如何处理他的用户和身份验证部分。
所以我有一个带有 RavenDB 的 ASP.NET MC4 应用程序。
最好的方法是什么?
要使用 RavenDB 的成员资格提供程序之一并在 API 部分中单独处理 Oauth?前任。格里芬的解决方案在这里。
或者制作一个自定义解决方案,重新实现会员废话并支持 OAuth。
我真的不知道从哪里开始,任何关于如何做到这一点的建议表示赞赏。
** 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 中的内容。
第三 - 我将它存储在数据库中。 这是您可以执行任何自定义数据库逻辑的地方
而已。
模块化的东西
结束。
现在对不起..距离《天启》还有几个小时。我必须做好自己的准备。
出色地。会员提供商很臃肿。如果您不打算使用其中的功能而只使用 OAuth,我不会使用它们。不幸的是,MVC4 中提供的 SimpleMembership 和 oath 提供程序更加混乱。
所以你的选择是:
如果您打算坚持 #3,我建议您使用我的(在 Griffin.MvcContrib 中)。建立会员服务提供商并非易事。
至于 oauth,您有一个解决方案,例如:https ://github.com/rafek/SimpleSocialAuth