如果你看看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中間件都以這種方式工作。