Skip to content

Commit e0ce626

Browse files
authored
Merge pull request #184 from m0rt3nlund/client_authentication_method
Allow "none" method
2 parents 960b937 + 27b3290 commit e0ce626

7 files changed

Lines changed: 14 additions & 50 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Now requires Elixir 1.15 / OTP 26.
1313
* `:inets` is now started automatically by `Assent`, and no longer required in `:extra_applications`
1414
* `Assent.JWTAdapter.AssentJWT` now supports EdDSA algorithms
1515
* `Assent.JWTAdapter.AssentJWT` now supports EC JWKs
16+
* `Assent.Strategy.OIDC` no longer rejects a `:client_authentication_method` missing from the provider's `token_endpoint_auth_methods_supported`
1617

1718
### Bug fixes
1819

lib/assent/strategies/oidc.ex

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ defmodule Assent.Strategy.OIDC do
282282
@spec callback(Keyword.t(), map(), atom()) :: on_callback()
283283
def callback(config, params, strategy \\ __MODULE__) do
284284
with {:ok, openid_config} <- fetch_openid_configuration(config),
285-
{:ok, method} <- fetch_client_authentication_method(openid_config, config),
285+
{:ok, method} <- fetch_client_authentication_method(config),
286286
{:ok, token_url} <- fetch_from_openid_config(openid_config, "token_endpoint") do
287287
config
288288
|> Keyword.put(:openid_configuration, openid_config)
@@ -292,15 +292,10 @@ defmodule Assent.Strategy.OIDC do
292292
end
293293
end
294294

295-
defp fetch_client_authentication_method(openid_config, config) do
296-
method = Keyword.get(config, :client_authentication_method, "client_secret_basic")
297-
methods = Map.get(openid_config, "token_endpoint_auth_methods_supported")
298-
supported_method? = (is_nil(methods) && true) || method in methods
299-
300-
case supported_method? do
301-
true -> parse_client_auth_method(method)
302-
false -> {:error, "Unsupported client authentication method: #{method}"}
303-
end
295+
defp fetch_client_authentication_method(config) do
296+
config
297+
|> Keyword.get(:client_authentication_method, "client_secret_basic")
298+
|> parse_client_auth_method()
304299
end
305300

306301
defp parse_client_auth_method("none"), do: {:ok, nil}

test/assent/strategies/auth0_test.exs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,7 @@ defmodule Assent.Strategy.Auth0Test do
3636
end
3737

3838
test "callback/2", %{config: config, callback_params: params} do
39-
openid_config =
40-
config[:openid_configuration]
41-
|> Map.put("issuer", "https://{yourDomain}/")
42-
|> Map.put("token_endpoint_auth_methods_supported", ["client_secret_post"])
43-
39+
openid_config = Map.put(config[:openid_configuration], "issuer", "https://{yourDomain}/")
4440
session_params = Map.put(config[:session_params], :nonce, "crypto-value")
4541

4642
config =

test/assent/strategies/azure_ad_test.exs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ defmodule Assent.Strategy.AzureADTest do
4040

4141
test "callback/2", %{config: config, callback_params: params} do
4242
openid_config =
43-
config[:openid_configuration]
44-
|> Map.put(
43+
Map.put(
44+
config[:openid_configuration],
4545
"issuer",
4646
"https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0"
4747
)
48-
|> Map.put("token_endpoint_auth_methods_supported", ["client_secret_post"])
4948

5049
session_params = Map.put(config[:session_params], :nonce, "123523")
5150

test/assent/strategies/gitlab_test.exs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,11 @@ defmodule Assent.Strategy.GitlabTest do
4343
end
4444

4545
test "callback/2", %{config: config, callback_params: params} do
46-
openid_config =
47-
Map.put(config[:openid_configuration], "token_endpoint_auth_methods_supported", [
48-
"client_secret_post"
49-
])
50-
5146
config =
52-
Keyword.merge(config,
53-
openid_configuration: openid_config,
54-
client_id: "4843ae8973e91d7f63baf626a88e221648d8839d0edee5878c9f1535f6930a1a"
47+
Keyword.put(
48+
config,
49+
:client_id,
50+
"4843ae8973e91d7f63baf626a88e221648d8839d0edee5878c9f1535f6930a1a"
5551
)
5652

5753
[key | _rest] = expect_oidc_jwks_uri_request()

test/assent/strategies/google_test.exs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ defmodule Assent.Strategy.GoogleTest do
3535

3636
test "callback/2", %{config: config, callback_params: params} do
3737
openid_config =
38-
config[:openid_configuration]
39-
|> Map.put("issuer", "https://accounts.google.com")
40-
|> Map.put("token_endpoint_auth_methods_supported", ["client_secret_post"])
38+
Map.put(config[:openid_configuration], "issuer", "https://accounts.google.com")
4139

4240
session_params = Map.put(config[:session_params], :nonce, "0394852-3190485-2490358")
4341

test/assent/strategies/oidc_test.exs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,6 @@ defmodule Assent.Strategy.OIDCTest do
4545
{:error, "Invalid client authentication method: invalid"}
4646
end
4747

48-
test "with unsupported authentication method", %{config: config, callback_params: params} do
49-
openid_configuration =
50-
Map.put(config[:openid_configuration], "token_endpoint_auth_methods_supported", [
51-
"private_key_jwt"
52-
])
53-
54-
config =
55-
config
56-
|> Keyword.put(:client_authentication_method, "client_secret_basic")
57-
|> Keyword.put(:openid_configuration, openid_configuration)
58-
59-
assert OIDC.callback(config, params) ==
60-
{:error, "Unsupported client authentication method: client_secret_basic"}
61-
end
62-
6348
test "with missing `token_endpoint` configuration options", %{
6449
config: config,
6550
callback_params: params
@@ -187,15 +172,9 @@ defmodule Assent.Strategy.OIDCTest do
187172
config: config,
188173
callback_params: params
189174
} do
190-
openid_configuration =
191-
Map.put(config[:openid_configuration], "token_endpoint_auth_methods_supported", [
192-
"private_key_jwt"
193-
])
194-
195175
config =
196176
config
197177
|> Keyword.put(:client_authentication_method, "private_key_jwt")
198-
|> Keyword.put(:openid_configuration, openid_configuration)
199178
|> Keyword.put(:private_key, @private_rsa_key)
200179
|> Keyword.put(:private_key_id, "key_id")
201180

0 commit comments

Comments
 (0)