IdentityServer4 是一個提供 認證服務,單點登錄/登出(SSO),API訪問控制,聯合認證通道的可定製、免費商業支持的框架。 ...
IdentityServer4 中文文檔 -12- (快速入門)添加外部認證支持
原文:http://docs.identityserver.io/en/release/quickstarts/4_external_authentication.html
上一篇:IdentityServer4 中文文檔 -11- (快速入門)添加基於 OpenID Connect 的用戶認證
下一篇:IdentityServer4 中文文檔 -13- (快速入門)切換到混合流並添加 API 訪問
接下來我們將添加外部認證支持。這真的很簡單,因為你所需要的實際上只是一個 ASP.NET Core 相容的認證中間件。
ASP.NET Core 自身已經承載了對 Google,Facebook,Twitter,Microsoft 賬戶 以及 OpenID Connect 的支持。另外你可以在 這裡 找到更多其他的認證提供程式。
添加 Google 支持
為了能夠使用 Google 進行身份驗證,你首先需要對其進行註冊。這應該是在開發人員控制台完成的。創建一個新項目,啟用 Google+ API 並且通過添加 /signin-google 路徑到你的基地址來配置你本地 IdentityServer 的回調地址(比如:http://localhost:5000/signin-google)。
如果你在 5000 埠上運行 IdentityServer - 那麼你可以簡單地從以下代碼片段中使用客戶端id/密碼,因為這是我們預先註冊的。
首先添加 Google 認證中間 NuGet 程式包到你的項目中(Microsoft.AspNetCore.Authentcation.Google
)
然後我們要將中間件添加到管道中。順序很重要,額外的認證中間件必須在 IdentityServer 之後、MVC 之前運行。
預設情況下我們會在幕後連接一個 cookie 中間件,這樣的話外部認證就能夠存儲它的輸出。你只需要將外部認證中間件添加到管道中,並讓它使用 IdentityServerConstants.ExternalCookieAuthenticationScheme
登錄方案:
app.UseGoogleAuthentication(new GoogleOptions
{
AuthenticationScheme = "Google",
DisplayName = "Google",
SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com",
ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo"
});
註意:在 ASP.NET Core Identity 中使用外部認證的時候,
SignInScheme
必須設置為Identity.External
,而不是IdentityServerConstants.ExternalCookieAuthenticationScheme
。
現在運行 MVC 客戶端,然後嘗試進行認證 - 你將在登錄頁面上看到一個 Google 按鈕:
通過認證後,你可以看到現在的身份信息是由 Google 數據提供的了:
進一步實驗
你可以添加額外的外部認證提供程式。我們有一個雲托管的 IdentityServer4 示例版本,你可以通過 OpenID Connect 集成它。
首先添加 Microsoft.AspNetCore.Authentication.OpenIDConnect
Nuget 程式包到你的 IdentityServer 項目中:
然後添加對應的中間件:
// 外部 OpenId Connect 認證中間件。
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
SignOutScheme = IdentityServerConstants.SignoutScheme,
DisplayName = "開放鏈接",
Authority = "https://demo.identiyserver.io/",
ClientId = "implicit",
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
}
});
註意:快速入門 UI 會自動提供外部用戶。換句話說,如果一個外部用戶第一次登陸進來,就會創建一個本地用戶,所有外部身份信息都會被覆制過來並與新的本地用戶關聯。處理這種情況的方法完全取決於你怎麼想。也許你會想要首先顯示某種用戶註冊頁面。預設的快速入門源代碼可以在 這裡 找到。
上一篇:IdentityServer4 中文文檔 -11- (快速入門)添加基於 OpenID Connect 的用戶認證
下一篇:IdentityServer4 中文文檔 -13- (快速入門)切換到混合流並添加 API 訪問