2017-06-04 69 views
1

當未經身份驗證的用戶打開客戶端網站上的安全頁面的URL時,他/她將重定向到IdentifyServer以進行登錄,並且成功登錄後返回到客戶端的主頁面(使用默認客戶端/ IdentityServer的實現)。
問題在github RedirectUris with callback params does not work解釋說,這是客戶的責任要記住查詢字符串並具有推薦:IdentityServer客戶端示例在重定向後記住QueryString參數

如果您需要跨重定向保持狀態,然後發出 cookie的客戶端或通過官方的數據傳遞狀態參數。您通常想要使用狀態參數作爲本地保持數據的指針 - 例如,一塊餅乾。創建一個隨機名稱的cookie - 存儲需要存儲的任何內容 - 將cookie名稱 作爲狀態參數來回傳輸。只是把數據放在狀態上有一個問題,即有人可能會在返回時修改這些值。

問題Identity server 3 MVC client state parameter有類似的建議:

存儲狀態在你登錄後要重定向路徑的應用程序。 在IdSvr記錄您的用戶並重定向回您的一個着名的 回調URI後,您將讀取該狀態以知道將用戶發送到哪裏。 IOW,請在應用程序中跟蹤商店狀態,瞭解登錄後重定向 路徑。如果你把它放在ProtocolMessage.State ,那麼請注意有人可以篡改它。如果你保護 狀態(簽名/加密),那麼沒關係。在您的應用中保留 狀態可能會更容易/更安全。

由於這是一個非常典型的場景,我希望有人有這樣的實現的例子。 任何人都可以分享示例代碼/給一些文章的參考?

我的特定情況更多信息:

我的客戶是網頁形式的網站以實現類似IdentityServer3.Samples WebFormsClient
1.用戶打開https://mydomain/mypage?querystringparams
2.In的Web.config我

<authorization> 
      <deny users="?" /> 
    </authorization> 

3.In客戶Startup.cs相關設置

new OpenIdConnectAuthenticationOptions 
{ 
    Authority = "http://localhost:5000/",//IdentityServer4 Host 
    RedirectUri ="https://mydomain/" 
} 

4.On IdentityServer相關設置

new Client 
{ 
    RedirectUris = { "https://mydomain/" , "http://mydomain/" } 
} 
  1. 登錄後用戶重定向到https://mydomain/,但需要重定向到https://mydomain/mypage?querystringparams

回答

1

我還沒有看過WebFormsClient。但是,如果您可以使用OpenIdConnectAuthentication Owin中間件(在OwinClient示例中使用),重定向應該會自動發生。如果OWIN中間件不受支持,您可以手動處理它。看看https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/MvcCodeFlowClientManual樣本。在那裏你可以控制狀態參數並自己處理重定向。

e.g: 在AccountController/SignIn()你可以從查詢字符串redirectUri,並添加到發送給服務器身份的authorization endpoint狀態參數。

然後在AccountController/SignInCallback()中,您可以檢索狀態參數並將用戶重定向到他輸入的URL。

使用OwinAuthentication中間件,應該自動處理。

相關問題