6

我想弄清楚一旦用戶使用Dotnet Core MVC App上的OpenID Connect進行身份驗證後,運行一些代碼的最佳方式。我不想在登錄後對重定向網址進行硬編碼,因爲他們仍然需要結束他們嘗試訪問後的身份驗證。我只需要運行代碼例如。 「檢查它是否第一次登錄並設置標誌」或類似的東西。在Asp.net Core的openid連接登錄後運行代碼

我使用的是中間件,但是因爲每次請求都會調用它,導致一些問題。

有沒有人有關於如何實現這一目標的任何想法?

+0

你是怎麼回事?我有完全相同的要求,但一直沒有能夠拿出一個合適的解決方案離子呢。我發佈了類似的[問題](https://stackoverflow.com/questions/45618386/how-to-redirect-after-azure-ad-authentication-to-different-controller-action-in) – OjM

+0

你是如何解決問題?我有完全相同的問題。 – TejSoft

+0

你應該有一個方法來生成你的API令牌......只要在認證過程完成後在那裏調用一個方法,並在用戶表中有一個標誌,比如AccountNeverLoggedIn ... –

回答

0

我相信這種類型的選擇性重新路由應該在繼承自AuthorizeAttribute的類中執行;可以在那裏採取許多序言操作,包括應用其他角色上下文。

一個示例是閱讀並接受條款和條件,必須對登錄憑證執行一次(讀取用戶)。這可以通過重定向到角色受保護的MVC控制器來執行。一旦被接受,角色「TandC_Consent」(或任何其他角色)可以被應用於用戶,並且用戶可以被重定向到控制器,該控制器在每次之後都使用[AuthorizePermission("TandC_Consent")]進行驗證。

This github example顯示如何實現AuthorizeAttribute實例和[AuthorizePermission()]修飾符。

0

我也在搜索如何做到這一點,最後我使用了IdentityServer3。 IUserService接口定義了一些可以重載的方法。其中一個方法是PostAuthenticateAsync從IdentityServer3文檔:在用戶已成功驗證

這種方法被稱爲但在此之前他們返回到客戶端應用程序。它允許一個 綜合位置檢查所有其他身份驗證方法之後的自定義用戶工作流程。它專爲UI工作流程而設計。通過 PostAuthenticationContext具有以下屬性:SignInMessage:傳遞給授權端點的 上下文信息。 AuthenticateResult:當前的AuthenticateResult。用戶服務 可以重新分配給一個非空值來更改認證結果 。

context參數有AuthenticateResult屬性,該屬性可以設置爲自定義的驗證結果:

public override Task PostAuthenticateAsync(PostAuthenticationContext context) 
{ 
    // code that will determine target url 
    // redirectPath = ... 
    context.AuthenticateResult = AuthenticateResult(redirectPath, claims); 
} 

redirectPath必須以/或〜/」

這裏是IUSerService實施的example