2016-03-27 51 views
0

我目前在我的Idsrv登錄頁面上有一個註冊鏈接,該鏈接重定向到與Idsrv相同的管道上託管的MVC註冊頁面。註冊流程如下:IdentityServer3問題部分登錄Cookie

  1. 創建賬戶(電子郵件&密碼)並保存到數據庫。
  2. 選擇訂閱併購買它(在具有userId的數據庫中存儲購買信息)。
  3. 重定向到客戶端應用程序

在過去,註冊登錄頁面上的鏈接將把用戶帳戶創建頁面,並在他們的電子郵件&密碼進入我會使用發出Idsrv登錄cookie驗證碼:

var login = new AuthenticatedLogin 
       { 
        IdentityProvider = IdentityServer3.Core.Constants.BuiltInIdentityProvider, 
        Subject = user.Id, 
        Name = user.UserName 
       }; 

    this.Request.GetOwinContext().Environment.IssueLoginCookie(login); 

認購&購買頁面被飾以[IdentityServerFullLogin]屬性,以確保只有授權的用戶訪問它們。

我已添加外部登錄支持,並且正在使用部分登錄將新的外部用戶重定向到此註冊序列,然後才能完成其本地帳戶設置。我遇到的問題是現在我有[IdentityServerPartialLogin]和[IdentityServerFullLogin]屬性需要在相同的控制器方法,顯然不工作。我想知道如何修改我的原始註冊順序(使用註冊鏈接)以使用部分登錄而不是完整登錄併發出完整登錄Cookie。似乎需要有一個Environment.IssuePartialLoginCookie()方法來完成我需要做的事情,但不知道如何繼續。

回答

0

您必須更改執行授權的方式。而不是使用這些屬性,你可以在動作方法本身中明確/手動地執行它。有很容易的OWIN擴展方法來了解用戶是否具有以下兩種登錄類型之一:https://identityserver.github.io/Documentation/docsv2/advanced/owin.html

+0

明白了,最終創建了一個使用GetIdentityServerPartialLoginAsync和GetIdentityServerFullLoginAsync的自定義IAuthenticationFilter,以確保用戶部分或完全登錄。 ! – narciero