Skip to content

Commit 3763385

Browse files
committed
Add OIDC token validation and Bearer auth
1 parent 8faf94e commit 3763385

19 files changed

Lines changed: 2448 additions & 59 deletions

ktor-server/ktor-server-plugins/ktor-server-auth-oidc/api/ktor-server-auth-oidc.api

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
public final class io/ktor/server/auth/oidc/Oidc {
22
public static final field Companion Lio/ktor/server/auth/oidc/Oidc$Companion;
33
public final fun provider (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
4+
public final fun provider (Ljava/lang/String;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
45
}
56

67
public final class io/ktor/server/auth/oidc/Oidc$Companion : io/ktor/server/application/BaseApplicationPlugin {
@@ -9,6 +10,42 @@ public final class io/ktor/server/auth/oidc/Oidc$Companion : io/ktor/server/appl
910
public synthetic fun install (Lio/ktor/util/pipeline/Pipeline;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
1011
}
1112

13+
public final class io/ktor/server/auth/oidc/OidcAccessTokenConfig {
14+
public final fun getAudiences ()Ljava/util/Set;
15+
public final fun setAudiences (Ljava/util/Set;)V
16+
}
17+
18+
public final class io/ktor/server/auth/oidc/OidcAuthenticatedContextKt {
19+
public static final fun getProvider (Lio/ktor/server/auth/oidc/OidcProviderContext;)Lio/ktor/server/auth/oidc/OidcProvider;
20+
}
21+
22+
public final class io/ktor/server/auth/oidc/OidcBearerConfig {
23+
public final fun getTokenExtractor ()Lkotlin/jvm/functions/Function1;
24+
public final fun setTokenExtractor (Lkotlin/jvm/functions/Function1;)V
25+
}
26+
27+
public final class io/ktor/server/auth/oidc/OidcBearerContext : io/ktor/server/auth/oidc/OidcProviderContext, io/ktor/server/auth/typesafe/AuthenticatedContext {
28+
public fun principal (Lio/ktor/server/routing/RoutingContext;)Ljava/lang/Object;
29+
public fun provider ()Lio/ktor/server/auth/oidc/OidcProvider;
30+
}
31+
32+
public final class io/ktor/server/auth/oidc/OidcJwtConfig {
33+
public final fun disableJwkCache ()V
34+
public final fun disableJwkRateLimit ()V
35+
public final fun getAllowedAlgorithms ()Ljava/util/Set;
36+
public final fun getClockSkew-UwyO8pc ()J
37+
public final fun getJwkBuilder ()Lkotlin/jvm/functions/Function1;
38+
public final fun getJwkProviderFactory ()Lkotlin/jvm/functions/Function1;
39+
public final fun jwkCache-HG0u8IE (JJ)V
40+
public static synthetic fun jwkCache-HG0u8IE$default (Lio/ktor/server/auth/oidc/OidcJwtConfig;JJILjava/lang/Object;)V
41+
public final fun jwkRateLimit-HG0u8IE (JJ)V
42+
public static synthetic fun jwkRateLimit-HG0u8IE$default (Lio/ktor/server/auth/oidc/OidcJwtConfig;JJILjava/lang/Object;)V
43+
public final fun setAllowedAlgorithms (Ljava/util/Set;)V
44+
public final fun setClockSkew-LRDsOJo (J)V
45+
public final fun setJwkBuilder (Lkotlin/jvm/functions/Function1;)V
46+
public final fun setJwkProviderFactory (Lkotlin/jvm/functions/Function1;)V
47+
}
48+
1249
public final class io/ktor/server/auth/oidc/OidcKt {
1350
public static final fun getOidcMetadataRefreshFailed ()Lio/ktor/events/EventDefinition;
1451
public static final fun openIdConnect (Lio/ktor/server/application/Application;)Lio/ktor/server/auth/oidc/Oidc;
@@ -39,18 +76,171 @@ public final class io/ktor/server/auth/oidc/OidcPluginConfig {
3976
}
4077

4178
public final class io/ktor/server/auth/oidc/OidcProvider {
79+
public final fun currentJwkProvider ()Lcom/auth0/jwk/JwkProvider;
4280
public final fun currentMetadata ()Lio/ktor/server/auth/oidc/OpenIdProviderMetadata;
81+
public final fun getBearer ()Lio/ktor/server/auth/typesafe/DefaultAuthScheme;
4382
public final fun getIssuer ()Ljava/lang/String;
4483
public final fun getName ()Ljava/lang/String;
4584
}
4685

4786
public final class io/ktor/server/auth/oidc/OidcProviderConfig {
4887
public field issuer Ljava/lang/String;
88+
public final fun accessToken (Lkotlin/jvm/functions/Function1;)V
89+
public final fun bearer (Lkotlin/jvm/functions/Function1;)V
90+
public static synthetic fun bearer$default (Lio/ktor/server/auth/oidc/OidcProviderConfig;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
4991
public final fun getIssuer ()Ljava/lang/String;
5092
public final fun getName ()Ljava/lang/String;
93+
public final fun jwt (Lkotlin/jvm/functions/Function1;)V
5194
public final fun setIssuer (Ljava/lang/String;)V
5295
}
5396

97+
public abstract interface class io/ktor/server/auth/oidc/OidcProviderContext {
98+
public abstract fun provider ()Lio/ktor/server/auth/oidc/OidcProvider;
99+
}
100+
101+
public abstract class io/ktor/server/auth/oidc/OidcToken {
102+
public static final field Companion Lio/ktor/server/auth/oidc/OidcToken$Companion;
103+
public synthetic fun <init> (ILkotlinx/serialization/internal/SerializationConstructorMarker;)V
104+
public static final synthetic fun write$Self (Lio/ktor/server/auth/oidc/OidcToken;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
105+
}
106+
107+
public final class io/ktor/server/auth/oidc/OidcToken$Access : io/ktor/server/auth/oidc/OidcToken {
108+
public static final field Companion Lio/ktor/server/auth/oidc/OidcToken$Access$Companion;
109+
public final fun getClaims ()Lio/ktor/server/auth/oidc/TokenClaims;
110+
public final fun getClientId ()Ljava/lang/String;
111+
public final fun getUserInfo ()Lio/ktor/server/auth/oidc/OidcToken$UserInfo;
112+
public final fun getValue ()Ljava/lang/String;
113+
}
114+
115+
public final synthetic class io/ktor/server/auth/oidc/OidcToken$Access$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
116+
public static final field INSTANCE Lio/ktor/server/auth/oidc/OidcToken$Access$$serializer;
117+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
118+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/ktor/server/auth/oidc/OidcToken$Access;
119+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
120+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
121+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/ktor/server/auth/oidc/OidcToken$Access;)V
122+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
123+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
124+
}
125+
126+
public final class io/ktor/server/auth/oidc/OidcToken$Access$Companion {
127+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
128+
}
129+
130+
public final class io/ktor/server/auth/oidc/OidcToken$Companion {
131+
public final fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
132+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
133+
}
134+
135+
public final class io/ktor/server/auth/oidc/OidcToken$Id : io/ktor/server/auth/oidc/OidcToken {
136+
public static final field Companion Lio/ktor/server/auth/oidc/OidcToken$Id$Companion;
137+
public final fun getAccessToken ()Ljava/lang/String;
138+
public final fun getAccessTokenClaims ()Lio/ktor/server/auth/oidc/TokenClaims;
139+
public final fun getClaims ()Lio/ktor/server/auth/oidc/TokenClaims;
140+
public final fun getRefreshToken ()Ljava/lang/String;
141+
public final fun getUserInfo ()Lio/ktor/server/auth/oidc/OidcToken$UserInfo;
142+
public final fun getValue ()Ljava/lang/String;
143+
}
144+
145+
public final synthetic class io/ktor/server/auth/oidc/OidcToken$Id$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
146+
public static final field INSTANCE Lio/ktor/server/auth/oidc/OidcToken$Id$$serializer;
147+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
148+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/ktor/server/auth/oidc/OidcToken$Id;
149+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
150+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
151+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/ktor/server/auth/oidc/OidcToken$Id;)V
152+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
153+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
154+
}
155+
156+
public final class io/ktor/server/auth/oidc/OidcToken$Id$Companion {
157+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
158+
}
159+
160+
public final class io/ktor/server/auth/oidc/OidcToken$Opaque : io/ktor/server/auth/oidc/OidcToken {
161+
public static final field Companion Lio/ktor/server/auth/oidc/OidcToken$Opaque$Companion;
162+
public final fun getIntrospection ()Lio/ktor/server/auth/oidc/OpaqueTokenIntrospection;
163+
public final fun getValue ()Ljava/lang/String;
164+
}
165+
166+
public final synthetic class io/ktor/server/auth/oidc/OidcToken$Opaque$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
167+
public static final field INSTANCE Lio/ktor/server/auth/oidc/OidcToken$Opaque$$serializer;
168+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
169+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/ktor/server/auth/oidc/OidcToken$Opaque;
170+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
171+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
172+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/ktor/server/auth/oidc/OidcToken$Opaque;)V
173+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
174+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
175+
}
176+
177+
public final class io/ktor/server/auth/oidc/OidcToken$Opaque$Companion {
178+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
179+
}
180+
181+
public final class io/ktor/server/auth/oidc/OidcToken$UserInfo {
182+
public static final field Companion Lio/ktor/server/auth/oidc/OidcToken$UserInfo$Companion;
183+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
184+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
185+
public final fun getEmail ()Ljava/lang/String;
186+
public final fun getEmailVerified ()Ljava/lang/Boolean;
187+
public final fun getFamilyName ()Ljava/lang/String;
188+
public final fun getGivenName ()Ljava/lang/String;
189+
public final fun getName ()Ljava/lang/String;
190+
public final fun getPicture ()Ljava/lang/String;
191+
public final fun getPreferredUsername ()Ljava/lang/String;
192+
public final fun getSubject ()Ljava/lang/String;
193+
}
194+
195+
public final synthetic class io/ktor/server/auth/oidc/OidcToken$UserInfo$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
196+
public static final field INSTANCE Lio/ktor/server/auth/oidc/OidcToken$UserInfo$$serializer;
197+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
198+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/ktor/server/auth/oidc/OidcToken$UserInfo;
199+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
200+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
201+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/ktor/server/auth/oidc/OidcToken$UserInfo;)V
202+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
203+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
204+
}
205+
206+
public final class io/ktor/server/auth/oidc/OidcToken$UserInfo$Companion {
207+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
208+
}
209+
210+
public final class io/ktor/server/auth/oidc/OpaqueTokenIntrospection {
211+
public static final field Companion Lio/ktor/server/auth/oidc/OpaqueTokenIntrospection$Companion;
212+
public fun <init> (ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)V
213+
public synthetic fun <init> (ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
214+
public final fun getActive ()Z
215+
public final fun getAudience ()Ljava/util/List;
216+
public final fun getClaims ()Lkotlinx/serialization/json/JsonObject;
217+
public final fun getClientId ()Ljava/lang/String;
218+
public final fun getExpiresAt ()Ljava/lang/Long;
219+
public final fun getIssuedAt ()Ljava/lang/Long;
220+
public final fun getIssuer ()Ljava/lang/String;
221+
public final fun getJwtId ()Ljava/lang/String;
222+
public final fun getNotBefore ()Ljava/lang/Long;
223+
public final fun getScope ()Ljava/lang/String;
224+
public final fun getSubject ()Ljava/lang/String;
225+
public final fun getTokenType ()Ljava/lang/String;
226+
public final fun getUsername ()Ljava/lang/String;
227+
}
228+
229+
public final synthetic class io/ktor/server/auth/oidc/OpaqueTokenIntrospection$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
230+
public static final field INSTANCE Lio/ktor/server/auth/oidc/OpaqueTokenIntrospection$$serializer;
231+
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
232+
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/ktor/server/auth/oidc/OpaqueTokenIntrospection;
233+
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
234+
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
235+
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/ktor/server/auth/oidc/OpaqueTokenIntrospection;)V
236+
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
237+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
238+
}
239+
240+
public final class io/ktor/server/auth/oidc/OpaqueTokenIntrospection$Companion {
241+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
242+
}
243+
54244
public final class io/ktor/server/auth/oidc/OpenIdDiscoveryException : java/lang/RuntimeException {
55245
public fun <init> (Ljava/lang/String;Ljava/lang/Throwable;)V
56246
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -118,3 +308,21 @@ public final class io/ktor/server/auth/oidc/OpenIdProviderMetadataKt {
118308
public static final fun fetchOpenIdMetadata (Lio/ktor/client/HttpClient;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
119309
}
120310

311+
public final class io/ktor/server/auth/oidc/TokenClaims {
312+
public final fun claim (Ljava/lang/String;)Lkotlinx/serialization/json/JsonElement;
313+
public final fun claimString (Ljava/lang/String;)Ljava/lang/String;
314+
public final fun getAlgorithm ()Ljava/lang/String;
315+
public final fun getAudience ()Ljava/util/List;
316+
public final fun getExpiresAt ()Lkotlin/time/Instant;
317+
public final fun getHeader ()Lkotlinx/serialization/json/JsonObject;
318+
public final fun getIssuedAt ()Lkotlin/time/Instant;
319+
public final fun getIssuer ()Ljava/lang/String;
320+
public final fun getJwtId ()Ljava/lang/String;
321+
public final fun getKeyId ()Ljava/lang/String;
322+
public final fun getNotBefore ()Lkotlin/time/Instant;
323+
public final fun getPayload ()Lkotlinx/serialization/json/JsonObject;
324+
public final fun getSubject ()Ljava/lang/String;
325+
public final fun getType ()Ljava/lang/String;
326+
public final fun headerString (Ljava/lang/String;)Ljava/lang/String;
327+
}
328+

ktor-server/ktor-server-plugins/ktor-server-auth-oidc/build.gradle.kts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,25 @@ plugins {
88
}
99

1010
kotlin {
11+
compilerOptions {
12+
freeCompilerArgs.add("-Xcontext-parameters")
13+
}
14+
1115
sourceSets {
1216
jvmMain.dependencies {
1317
api(projects.ktorServerCore)
18+
api(projects.ktorServerAuth)
19+
api(projects.ktorServerAuthJwt)
1420
api(projects.ktorClientCore)
1521
api(projects.ktorClientContentNegotiation)
1622
api(projects.ktorSerializationKotlinxJson)
1723
api(libs.kotlinx.serialization.json)
18-
api(projects.ktorClientContentNegotiation)
19-
api(projects.ktorSerializationKotlinxJson)
2024
}
2125
jvmTest.dependencies {
2226
implementation(projects.ktorServerTestHost)
2327
implementation(projects.ktorServerContentNegotiation)
28+
implementation(projects.ktorServerCio)
29+
implementation(projects.ktorClientMock)
2430
}
2531
}
2632
}

0 commit comments

Comments
 (0)