什么是MVC"方式"在外部身份验证/登录中执行其他逻辑?

时间:2016-01-08 16:51:53

标签: asp.net-mvc facebook asp.net-mvc-5 owin

考虑以下情况:

在MVC 5(或更高版本)上,您启用了第三方身份验证(例如Facebook,Google)。

作为身份验证过程的一部分,我们希望与第三方身份验证提供程序执行其他操作 - 例如Facebook检查登录用户是否喜欢某个特定页面,或者用户的电子邮件地址是否已预先批准/白名单。

事件的循环似乎应该是: 1.通过外部服务验证用户(例如获取用户ID /电子邮件和第三方uniqueID) 2.使用第三方uniqueID(例如Facebook Id#)执行查询以获取有关用户的一些信息 3.如果用户符合某些条件,请登录用户;如果没有返回登录界面

对我来说,似乎应该有一个我们可以在身份验证过程中覆盖的方法,这样可以解决这个问题:

(这个我正在寻找的假设示例包括在正常的登录周期中检查用户的属性 - 我们将在一秒钟内进行额外的第三方查询。) / p>

override Boolean BeforeReturnSignedInUser(AppUser user){

if (whitelistedUsers.Email.Contains(user.email)){
    return true;
}

else {
     return false;
}

同样地,似乎应该有一种方法可以相当容易地访问第三方accessToken以对第三方社交媒体图执行额外的逻辑,但似乎,根据此,似乎不是:MVC 5 Web API with Facebook access token to RegisterExternal without need of Cookie < / p>

(另一方面,这更令人鼓舞:How to access Facebook private information by using ASP.NET Identity (OWIN)?但仍然需要添加大量工件来实现非常简单的操作。

无论如何,这些例子似乎都不干净 - 似乎增加了很多复杂性来进行额外的检查,这是5行代码!

1 个答案:

答案 0 :(得分:0)

MVC的方法是将facebook中间件配置为在ConfigureAuth中的Startup.Auth.cs方法中获取所需的信息(我正在查看MVC5项目模板),然后添加任何您希望IdentityModels.cs中的自定义声明(甚至还有评论// Add custom user claims here)。这样可以避免在尝试在其他地方添加声明时发生的冲突。