Skip to content

Commit 7662fc0

Browse files
authored
feat: add simpler validation (#13)
1 parent 1535432 commit 7662fc0

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

src/id_token_jws.erl

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
-module(id_token_jws).
22

3-
-ignore_xref([generate_key_for/1, generate_key_for/2, sign/2, sign/3]).
4-
-export([generate_key_for/1, generate_key_for/2, sign/2, sign/3, validate/2]).
3+
-define(API_CALLS,
4+
[generate_key_for/1, generate_key_for/2,
5+
sign/2, sign/3,
6+
validate/1, validate/2]).
7+
-ignore_xref(?API_CALLS).
8+
-export(?API_CALLS).
59

610
-include_lib("jose/include/jose_jwt.hrl").
711
-include_lib("jose/include/jose_jwk.hrl").
@@ -32,12 +36,23 @@ sign(Claims, JWK, JWS) ->
3236
{_Modules, JWTBin} = jose_jws:compact(JWT),
3337
JWTBin.
3438

39+
-spec validate(binary()) ->
40+
{ok, map()} |
41+
{error, invalid_signature | expired | no_public_key_matches}.
42+
validate(IdToken) ->
43+
Kid = extract_kid(IdToken),
44+
case id_token_pubkeys_storage:get(Kid) of
45+
{error, _} ->
46+
{error, no_public_key_matches};
47+
{ok, Key} ->
48+
validate_exp(validate_signature(Key, IdToken))
49+
end.
50+
3551
-spec validate(binary(), [map()]) ->
3652
{ok, map()} |
3753
{error, invalid_signature | expired | no_public_key_matches}.
3854
validate(IdToken, Keys) ->
39-
Protected = jose_jwt:peek_protected(IdToken),
40-
{_M, #{<<"kid">> := Kid}} = jose_jws:to_map(Protected),
55+
Kid = extract_kid(IdToken),
4156
SearchResult = lists:search(fun(#{<<"kid">> := OtherKid}) ->
4257
OtherKid =:= Kid
4358
end, Keys),
@@ -105,6 +120,11 @@ kid(_) -> jose_base64url:encode(crypto:strong_rand_bytes(16)).
105120
iat(#{iat := Iat}) -> Iat;
106121
iat(_) -> erlang:system_time(seconds).
107122

123+
extract_kid(IdToken) ->
124+
Protected = jose_jwt:peek_protected(IdToken),
125+
{_M, #{<<"kid">> := Kid}} = jose_jws:to_map(Protected),
126+
Kid.
127+
108128
%%%_* Emacs ====================================================================
109129
%%% Local Variables:
110130
%%% allout-layout: t

0 commit comments

Comments
 (0)