簡體   English   中英

使用 Azure AD 注冊單個 ASP.NET 核心 3.1 應用程序,並與許多不同的 ASP.NET 3.1 核心應用程序共享身份驗證

[英]Register a single ASP.NET Core 3.1 application with Azure AD and share authentication with many different ASP.NET 3.1 core applications

我創建了一個ASP.NET Core 3.1應用程序,並實現了 Azure AD OpenID Connect基於身份驗證。 我想與其他ASP.NET Core 3.1應用程序共享此身份驗證機制,而不是為每個應用程序創建此邏輯。 所有應用程序都將駐留在同一個 IIS 服務器上。

將與 Azure AD 相關的Startup.cs代碼中的邏輯提取到一個應用程序中是否有意義,該應用程序僅包含 Azure AD 身份驗證代碼,其他應用程序重定向到此應用程序進行身份驗證? 做這個的最好方式是什么? 還是應該在 Azure AD 中明確注冊每個應用程序,並在Startup.cs文件中擁有自己的 Azure AD 代碼? 或者我是否必須以某種方式實施與 Azure AD OpenID Connect 集成的本地身份服務器

傑里米的觀點非常好,所以我會將他標記為已接受的答案。 不過,這里有更多細節。

共享 OIDC 管道

通常的選擇是使用通用管道生成一個小型共享 C# 庫,然后將其插入每個應用程序。

每個應用程序都需要能夠處理 OIDC 重定向和響應,以及身份驗證 cookies、處理到期等。

標准“單點登錄”選項

這是最標准和推薦的方法:

  • 每個應用程序都有自己的 OAuth 客戶端配置
  • 每個應用程序都有自己的 client_id 和 redirect_uri
  • 每個應用程序都有自己的 OAuth 令牌和 Auth cookies

如果用戶從 App A 導航到 App B,他們會被重定向但登錄是自動的,因為授權服務器 Session Cookie,所以體驗是無縫的。

集成 WEB 平台選項

在某些情況下,您可能希望以與 Google 相同的方式避免額外的重定向:

  • 用戶登錄到 GMail (mail.google.com) 並被重定向
  • 用戶導航到 Google Drive (drive.google.com)
  • 雲端硬盤應用沒有第二次重定向

要在 OIDC 中實現這一點,您可以這樣做:

  • 為所有應用注冊一個 OAuth 客戶端
  • 分配多個重定向和注銷后 Uris

Auth cookie 屬性將包括以下內容:

  • 域=.google.com
  • 路徑 = /
  • 僅 Http
  • 安全的
  • SameSite = 嚴格

不過,我通常建議不要使用此選項,因為隨着時間的推移,它很容易導致比它解決的問題更多的問題:

  • Cookies 和令牌最終可能擁有太多權限
  • 如果攻擊者竊取了令牌/cookie,他們可以用它做更多事情
  • 應用程序更有可能以多種方式相互影響

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM