簡體   English   中英

使用 SAML SSO / OAuth2.0 保護 API

[英]Securing an API with SAML SSO / OAuth2.0

好的,所以我很難理解我的設置的正確流程。

目標

我想為我的 SPA 應用程序提供適當的 SSO 流程,該流程可以將用戶身份驗證到 API。

語境

我有一個 React 應用程序,它打算使用 Okta porta,它為 SSO 流提供 SAML(首選)和 OIDC。 我將我的靜態源包裝在為它們提供服務的 Web 服務器中,該服務器有一個檢查 cookie 的中間件,如果不存在,我將重定向到 IDP (Okta) 進行登錄。 目前這一切正常。

目前,我的 API 位於同一台服務器上,我打算將其移至單獨的服務器以獨立於網站進行擴展。 我的 API 還必須允許其他機器客戶端(服務)調用它,因此我實現了一個使用客戶端 ID 和機密作為身份驗證措施的服務帳戶流程。

一般來說,我的預期流程如下所示:

用戶導航到我的網站(未經授權) -> Web 服務器 -> 重定向到 IDP -> 斷言回調流 -> 生成 JWT 會話 cookie -> Web 應用程序進行 API 調用 -> API 服務器身份驗證中間件驗證 cookie / 不記名令牌。

問題。

如何生成 JWT 訪問令牌的詳細信息是我卡住的地方。 目前,我的網絡服務器接收 SAML 斷言並生成 JWT,這與服務帳戶 (bleh) 的 JWT 聲明邏輯不同。 我正在考慮實施 Auth 服務來集中令牌生成流程。

對於身份驗證服務,我研究了 OAuth2.0,它似乎是我需要的正確方法。 話雖如此,我找不到關於 SAML 斷言 -> OAuth2.0 遵循的模式的太多信息。 我看到了一份關於 saml2-bearer grant-type 的 IETF 草案,但它似乎已經死了。 我也不確定關於自定義實現的 OAuth2.0 授權類型的普遍共識。

正確的流程是什么樣的? 我想到了幾個場景:

  1. 與身份驗證服務位於同一服務中的 SAML 服務提供者。 在缺少 SSO 會話時,我的應用程序重定向到我的 Auth 服務,然后重定向到我的 IDP。 IDP 使用斷言調用我的 SP(身份驗證服務器),身份驗證服務生成一個令牌,然后我的身份驗證服務重定向回 Web 服務器,並將 cookie 放置在響應標頭中。

  2. SAML SP 作為網絡服務器因為網絡服務器是唯一需要使用 SSO 的系統,所以我可以在該過程中保留 SAML 流程。 一旦我的網絡服務器收到 SAML 斷言回調,我的服務器就會使用斷言聲明調用端點服務,然后我的身份驗證服務在 JSON 響應中返回訪問令牌。

  3. 其他的東西,比如 OAuth2.0 授權代碼流與用於 Web 應用程序的 PKCE。 或 OIDC 而不是 SAML 用於 SSO。

由於涉及 API,OIDC 聽起來是您的正確選擇。 與為企業 SSO 構建的 SAML 相比,OAuth 旨在保護 API。

您可以使用 OIDC 將 SPA 與 Okta 集成。 Okta 提供了適用於各種平台的 SDK,使您可以更輕松地進行操作。 您可以在此處找到 SDK: https : //developer.okta.com/code/angular/okta_angular_auth_js/

在 OIDC 流程之后從 Okta 獲得 ID 令牌和訪問令牌后,您可以使用訪問令牌訪問外部 API。 您的 API 資源服務器或 API 網關可以驗證訪問令牌。 Okta 再次提供 SDK 來驗證訪問令牌: https : //developer.okta.com/code/dotnet/jwt-validation/

暫無
暫無

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

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