IdentityServer4成功验证后,Google中间件如何处理/ signin-google回调?
我正在使用IdentityServer4。我配置了谷歌认证中间件here。但是,在Google注册的redirect uri是<domain>/signin-google
。另外,我知道ExternalLoginCallback端点在我通过Google认证并且在Google注册的重定向URI已被调用(/signin-google
)后被调用。IdentityServer4成功验证后,Google中间件如何处理/ signin-google回调?
我的问题是在/signin-google
和致电/ExternalLoginCallback
之间发生了什么?一旦浏览器重定向到/signin-google
,但在应用程序/中间件最终到达/ExternalLoginCallback
之前,会触发Google中间件中的哪些方法?
如果你看看ASP.NET Core Security Github repo,你可以找到Google middleware的实现。本质上,如果您通过代码追踪,您将看到GoogleHandler
继承自OAuthHandler<T>
,它继承自RemoteAuthenticationHandler<T>
。在RemoteAuthenticationHandler<T>
中,您将看到一种称为(here)的方法。此方法检查当前URL与Options
对象上CallbackPath
属性上的URL。这是身份验证中间件在身份验证提供程序重定向后触发的方式 - 它由中间件处理 - 不是控制器。一旦中间件被触发,它将恢复认证过程。
所有外部认证提供商中间件都以这种方式工作。一旦中间件被触发,在OAuthHandler中被称为HandleRemoteAuthentication
的方法被触发。请参阅here。这触发了OAuth 2.0 authorization code flow process的第二段,其中在该过程的第一段中获得的一次性使用代码被交换为访问令牌。该过程发生在ExternalLoginCallback被触发之前。具体来说,一旦代码被交换为访问令牌,并且从Google获得一些用户信息,则创建ClaimsPrincipal
并发布临时cookie。默认情况下,Cookie被命名为idsrv.external
。然后,您可以在IdentityServer4 Quickstart项目中看到,ExternalLoginCallback端点被触发,idsrv.external
Cookie被删除,并为ClaimsPrincipal
发出新的身份验证Cookie。
Google中间件覆盖特定于Google的基类的功能,但基本上所有的OAuth 2.0/OpenID Connect中间件都以这种方式工作。