mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-24 12:14:27 +02:00
fix: OIDC discovery advertises unsupported id_token response_type (#39498)
The OIDC discovery document at `/.well-known/openid-configuration` advertised `id_token` in `response_types_supported`, but `/login/oauth/authorize` only implements the authorization code flow and rejects any other response_type with `unsupported_response_type`. This mismatch caused OIDC client libraries that rely on discovery to attempt the implicit flow and fail silently. This removes `id_token` from `response_types_supported` so discovery matches actual server behavior, and adds an integration test asserting `response_type=id_token` is rejected consistently. Fixes #39482.
This commit is contained in:
1 parent
1903c61627
commit
c0a8eb8e74
2 files changed
+11
-1
No files matched your search
@@ -31,7 +31,6 @@ func OIDCWellKnown(ctx *context.Context) {
|
|||||||
"introspection_endpoint": oidcBaseUrl + "/login/oauth/introspect",
|
"introspection_endpoint": oidcBaseUrl + "/login/oauth/introspect",
|
||||||
"response_types_supported": []string{
|
"response_types_supported": []string{
|
||||||
"code",
|
"code",
|
||||||
"id_token",
|
|
||||||
},
|
},
|
||||||
"id_token_signing_alg_values_supported": []string{
|
"id_token_signing_alg_values_supported": []string{
|
||||||
oauth2_provider.DefaultSigningKey.SigningMethod().Alg(),
|
oauth2_provider.DefaultSigningKey.SigningMethod().Alg(),
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ func TestOAuth2(t *testing.T) {
|
|||||||
t.Run("AuthorizeNoClientID", testAuthorizeNoClientID)
|
t.Run("AuthorizeNoClientID", testAuthorizeNoClientID)
|
||||||
t.Run("AuthorizeUnregisteredRedirect", testAuthorizeUnregisteredRedirect)
|
t.Run("AuthorizeUnregisteredRedirect", testAuthorizeUnregisteredRedirect)
|
||||||
t.Run("AuthorizeUnsupportedResponseType", testAuthorizeUnsupportedResponseType)
|
t.Run("AuthorizeUnsupportedResponseType", testAuthorizeUnsupportedResponseType)
|
||||||
|
t.Run("AuthorizeUnsupportedResponseTypeIDToken", testAuthorizeUnsupportedResponseTypeIDToken)
|
||||||
t.Run("AuthorizeUnsupportedCodeChallengeMethod", testAuthorizeUnsupportedCodeChallengeMethod)
|
t.Run("AuthorizeUnsupportedCodeChallengeMethod", testAuthorizeUnsupportedCodeChallengeMethod)
|
||||||
t.Run("AuthorizeLoginRedirect", testAuthorizeLoginRedirect)
|
t.Run("AuthorizeLoginRedirect", testAuthorizeLoginRedirect)
|
||||||
t.Run("AuthorizeShow", testAuthorizeShow)
|
t.Run("AuthorizeShow", testAuthorizeShow)
|
||||||
@@ -163,6 +164,16 @@ func testAuthorizeUnsupportedResponseType(t *testing.T) {
|
|||||||
assert.Equal(t, "Only code response type is supported.", u.Query().Get("error_description"))
|
assert.Equal(t, "Only code response type is supported.", u.Query().Get("error_description"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAuthorizeUnsupportedResponseTypeIDToken(t *testing.T) {
|
||||||
|
req := NewRequest(t, "GET", "/login/oauth/authorize?client_id=da7da3ba-9a13-4167-856f-3899de0b0138&redirect_uri=https://example.com&response_type=id_token&state=thestate")
|
||||||
|
ctx := loginUser(t, "user1")
|
||||||
|
resp := ctx.MakeRequest(t, req, http.StatusSeeOther)
|
||||||
|
u, err := resp.Result().Location()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "unsupported_response_type", u.Query().Get("error"))
|
||||||
|
assert.Equal(t, "Only code response type is supported.", u.Query().Get("error_description"))
|
||||||
|
}
|
||||||
|
|
||||||
func testAuthorizeUnsupportedCodeChallengeMethod(t *testing.T) {
|
func testAuthorizeUnsupportedCodeChallengeMethod(t *testing.T) {
|
||||||
req := NewRequest(t, "GET", "/login/oauth/authorize?client_id=da7da3ba-9a13-4167-856f-3899de0b0138&redirect_uri=https://example.com&response_type=code&state=thestate&code_challenge_method=UNEXPECTED")
|
req := NewRequest(t, "GET", "/login/oauth/authorize?client_id=da7da3ba-9a13-4167-856f-3899de0b0138&redirect_uri=https://example.com&response_type=code&state=thestate&code_challenge_method=UNEXPECTED")
|
||||||
ctx := loginUser(t, "user1")
|
ctx := loginUser(t, "user1")
|
||||||
|
|||||||
Reference in new issue
Block a user