Asp.net mvc 什么是MVC;“方式”;是否要在外部身份验证/登录中执行其他逻辑?

Asp.net mvc 什么是MVC;“方式”;是否要在外部身份验证/登录中执行其他逻辑?,asp.net-mvc,facebook,asp.net-mvc-5,owin,Asp.net Mvc,Facebook,Asp.net Mvc 5,Owin,考虑以下场景: 在MVC 5(或更高版本)上,您已启用第三方身份验证(如Facebook、Google) 作为身份验证过程的一部分,我们希望与第三方身份验证提供商执行一项附加操作——例如,Facebook检查登录用户是否喜欢某个特定页面,或者用户的电子邮件地址是否预先批准/白名单 事件的循环似乎应该是: 1.通过外部服务认证用户(例如获取用户id/电子邮件和第三方唯一id) 2.使用第三方uniqueID(例如Facebook Id)执行查询以获取有关用户的一些信息 3.如果用户符合某些条件,请

考虑以下场景:

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

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

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

在我看来,似乎应该有一种方法,我们可以在身份验证过程中重写,就像这样,它可以实现以下目的:

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

类似地,似乎应该有一种方法可以相当容易地访问第三方accessToken,以针对第三方社交媒体图执行附加逻辑,但根据这一点,似乎不是:

(另一方面,这更令人鼓舞:但仍然需要为一个非常简单的操作添加大量工件)


在任何情况下,这两个例子看起来都不干净——似乎增加了很多复杂性来进行一个额外的检查,这是全部5行代码

MVC实现这一点的方法是配置facebook中间件,在
Startup.Auth.cs
中的
ConfigureAuth
方法中获取所需信息(我正在查看MVC5项目模板),然后在
IdentityModels.cs
中添加任何自定义声明(它甚至有一条注释
//在此处添加自定义用户声明
). 这避免了在其他位置添加声明时可能发生的冲突。

看起来必须指定自定义的IFacebookAuthenticationProvider。好的,我来看看如何从FaceBookAuthenticationContext获取访问令牌。但是,我仍然没有看到在登录生命周期中,如果不满足其他条件,我可以取消登录。(我确实知道如何通过app.CreatePerOwinContext注册一个对象来存储这些数据,但我不知道在不符合条件的情况下,我会在哪里读取数据并阻止登录)。在MVC模板中,外部登录在
ApplicationSignInManager
类的
ExternalSignInAsync
方法中进行验证。不幸的是,这是非虚拟的,因此无法覆盖以添加额外的验证逻辑。因此,我的想法是,应该可以将其配置为在Startup.Auth(请参阅:)中获取信息,然后在
帐户
控制器的
ExternalLoginCallback
中,该信息应该在
loginInfo
对象中可用,以便您可以在那里执行验证逻辑。
override Boolean BeforeReturnSignedInUser(AppUser user){

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

else {
     return false;
}