2017-02-25 28 views
4

我想在我的ASP.NET Core MVC Web應用程序中使用IdentityServer4進行身份驗證,但用戶註冊過程看起來很尷尬。如果您使用的是本地用戶帳戶,則大多數需要用戶註冊的網站都不會重新定向,而是使用單獨的網站(例如Facebook,Twitter等)註冊。IdentityServer4的用戶註冊過程

一種解決方案是在與我的MVC客戶端相同的進程中託管IdentityServer4,但不鼓勵。

是否有真實世界的本地用戶註冊IdentityServer4的例子?

+0

爲什麼不直接使用ASP.NET身份與MVC應用程序?不需要IdentityServer(除非我錯過了某些東西)。當需要跨許多可訪問許多apis(又名資​​源)的應用程序(又名客戶端)的獨立認證/授權服務器時,需要使用IdS。 –

+0

我不這麼認爲。但是沒有任何東西阻止你製作註冊與IDS相關的用戶的API。 – Lutando

回答

6

IdentityServer用於對現有用戶進行身份驗證,而不是真正創建新用戶。 在我們的用例,我們有3個項目中扮演一個角色:

  • 身份服務器
  • 受保護的API
  • 身份提供商(ASPNET核心身份)項目

用戶是通過調用API創建,這會在身份提供程序中創建適當的結構。 我們的身份服務器在驗證令牌請求時會對身份服務器進行調用。 我們的API使用身份服務器來保護資源,我們的身份提供者檢索我們可能需要的有關該用戶的信息,這些信息不包含在聲明中(例如權限)。

通過這種方式,我們的身份提供者可以跨項目(具有不同角色的一個用戶羣)共享,而Identity Server純粹用於對用戶進行身份驗證。所有用戶管理功能屬於別處。


編輯: @peyman我們沒有做什麼特別的石破天驚:只使用ASPNET核心身份框架(http://odetocode.com/blogs/scott/archive/2013/11/25/asp-net-core-identity.aspx)。

IUserStoreUserManager是此的主要驅動因素。當用戶被創建時,他們被分配一個角色,這對我們來說基於哪個應用程序請求創建該用戶。我們對IUserStore的實現是IdentityServer在驗證身份時最終將調用的內容,IdentityServer使用提供的數據來構建聲明。我們的資源API使用Policies作爲基於授權的相對簡單的保護(https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims

+0

這真的很有幫助。我仍然努力想象使用IdentityServer發出身份和訪問令牌的全部流程,如何將用戶身份從應用程序特定的權限中分離出來等等。因此,您的IdentityServer將調用您的IdentityProvider。您的身份提供者是獨立的API還是您主要的asp.net網站的一部分?那麼你如何保護你的身份提供者? – DMannion

+0

在我們的特殊情況下,我們的身份提供者是基礎架構上的API,不能公開訪問:它只能從演示基礎架構調用。其他體系結構也是可能的,我也見過一些身份提供者是IdentityServer的一部分。我自己沒有這樣做,我只能猜測他們提供了新的端點(一些開放,一些受保護)以允許其他apis/site訪問。 – Mashton

+0

Hi @Mashton,我有類似的情況,我有Saas應用程序與多個項目(aps.net表單網站)與不同的數據庫,並希望使用單個IDP,但用戶驗證我希望IDP連接到他們的每個數據庫。所以不知道如何基於客戶端來解決這個問題? – cvetyab