我试图在网络应用程序中实现Facebook身份验证登录,但有些东西我无法弄清楚。我知道对于一些经验丰富的开发人员来说这是一个非常愚蠢的问题但是,有人可以解释我这个代码片段吗?:
public class FacebookAuthProvider : FacebookAuthenticationProvider
{
public override Task Authenticated(FacebookAuthenticatedContext context)
{
context.Identity.AddClaim(new Claim("ExternalAccessToken", context.AccessToken));
return Task.FromResult<object>(null);
}
}
据我所知 context 是指 HTTP Request 中的数据,对吧?如果是这样,当我们正在进行context.AccessToken
时,指南会说这是由Facebook设定的。怎么可能呢?那里有什么流量?
它说,我引用:
如前所述,此令牌适用于外部提供商和 谷歌或Facebook发布,我们收到它后,我们需要 将它分配给名为“ExternalAccessToken”的自定义声明,这样就可以了 可在请求上下文中使用。
我没理解。 有人可以解释一下吗? 提前谢谢。
正如我所说,我知道这是一个愚蠢的问题,但我是那种想知道一切在幕后工作的人。
- 编辑 - 因此,Facebook发出请求并发送AccessToken。 然后我们将它存储在与索赔相同的请求上下文中。 那是怎么回事?如果是,那么,该请求上下文何时销毁? (当请求完成时,呃)是的,那个请求何时完成?发送令牌后不是吗?
答案 0 :(得分:0)
当您再次验证外部提供商时,例如Facebook您将客户端重定向到&#34; facebook登录页面&#34; (不是真正的登录页面)。在那里用户输入他的凭证并且facebook验证他们。然后,facebook会使用授权码重定向回您的页面,您可以使用该代码交换访问令牌。
所有这些都是在配置外部授权提供程序时由asp.net的身份验证中间件完成的。我不太了解中间件,但我认为上下文是暂时的(每个请求),但这不是很重要。
此图片来自here,您可以在此处了解有关OAuth 2.0授权代码授予的更多信息。