Asp.net-Mvc

在 Asp.net Core 中 openid 連接登錄後執行程式碼

  • April 26, 2018

一旦使用者在 Dotnet Core MVC 應用程序上使用 OpenID Connect 對自己進行了身份驗證,我試圖找出執行某些程式碼的最佳方式。我不想在登錄後硬編碼重定向 URL,因為他們仍然需要在身份驗證後到達他們試圖到達的位置。我只需要執行程式碼,例如。“檢查它是否是第一次登錄並設置標誌”或類似的東西。

我正在使用中間件,但由於每個請求都會呼叫它,因此會導致一些問題。

有沒有人對如何實現這一目標有任何想法?

我正在使用 OpenIdConnect 事件來解決這個問題。

.AddOpenIdConnect("oidc", options =>
{
  options.Events = new OpenIdConnectEvents
  {
      OnTokenValidated = async ctx =>
      {
          var userID = ctx.Principal.FindFirstValue("sub");

          var db = ctx.HttpContext.RequestServices.GetRequiredService<MyDb>();

          //Do things I need to do with the user here.

      }
  }
}

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

一個例子是閱讀和接受條款和條件,必須為登錄憑據執行一次(讀取使用者)。這可以通過重定向到受保護的較低角色的 MVC 控制器來執行。一旦接受了角色“ TandC_Consent”(或任何其他角色),就可以將其應用於使用者,並且可以將使用者重新定向到控制器,該控制器[AuthorizePermission("TandC_Consent")]隨後每次都驗證使用。

這個 github 範例展示瞭如何實現AuthorizeAttribute實例和[AuthorizePermission()]裝飾器。

引用自:https://stackoverflow.com/questions/44411314