2017-09-15 139 views
2

我正在使用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中間件中的哪些方法?

回答

0

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