簡體   English   中英

針對 Spring Boot API 的 Android 身份驗證不起作用

[英]Android authentication against Spring Boot API not working

我有一個使用 Auth0 JWT 身份驗證的 Spring Boot 后端 API,目前有兩個客戶端,一個 Vue SPA 和一個 Android 應用程序。 Vue SPA 工作正常。 它在 Auth0 中使用 SPA Application 類型,並且身份驗證機制使用 Audience,如下所示:

 {
    "domain": "mycompany.auth0.com",
    "clientId": "mySPAclientID",
    "audience": "https://myaudience.mycompany.com"
}

我想我可以在 Android 中做類似的事情,所以我在我的 Auth0 儀表板中創建了一個本地應用程序類型,下載了相應的快速入門,並嘗試進行身份驗證。 當然,我能夠針對 Auth0 進行身份驗證並取回 JWT,但是 JWT 不適用於我的 Spring Boot API,它由我的https://myaudience.mycompany.com受眾指定,並且我的 Spring Boot 安全性config 期望出現在 JWT 中。 我的第一個想法是我可以簡單地將受眾添加到 Android 應用程序的登錄操作中:

WebAuthProvider.login(auth0)
                .withScheme("demo")
                .withAudience(String.format("https://%s/userinfo", getString(R.string.com_auth0_domain)))
                .withAudience("https://myaudience.mycompany.com") // added this
                .start(this, new AuthCallback() { ... }

但這不起作用。 當我解析返回的 JWT 時,受眾部分不包含預期的塊。 它應該是這樣的:

"aud": [
    "https://myaudience.mycompany.com",
    "https://mycompany.auth0.com/userinfo"
  ]

但它看起來像這樣:

"aud": "myNativeClientID"

它也完全缺少范圍元素。 使這項工作的正確方法是什么? 我是否需要一個新的 Auth0 API,它需要一個新的 Spring Boot 安全機制? 還是我在登錄請求中遺漏了一些簡單的東西? 或者我的 Auth0 本機應用程序中缺少一些配置? 我已經閱讀了所有相關文檔,但沒有任何效果。 我不確定如何進行,任何幫助將不勝感激。

在 Auth0 員工的幫助下,我意識到我將 Auth0 ID 令牌與訪問令牌混淆了。 在 Auth0 中,ID 令牌始終作為 JWT 發布,但它們不能用於訪問 Auth0 API,只有訪問令牌才能做到這一點。 問題在於,除非您在登錄請求中指定“受眾”,否則訪問令牌是一種簡單的令牌格式,如下所示:

1v-QyDrPaJ5rOUBOk3g_0HtEwtN4C-4U

但是當你添加一個受眾(即一個 Auth0 API,它反過來在你的后端引用,不管它是什么,在我的情況下是 Spring Boot),訪問令牌變成一個 JWT,具有所有必需的受眾和范圍(默認情況下)我相信,范圍僅限於 openapi)。

因此,因為訪問令牌不是 JWT(因為我在第一次檢查登錄響應時還沒有添加受眾),所以我駁回了它,並使用了 ID 令牌,正如我所提到的,它不能用於獲取訪問 Auth0 API。 一旦我恢復使用訪問令牌 JWT,一切都按預期進行。

接受此作為答案,以防將來對任何人有所幫助。

暫無
暫無

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

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