Skip to content

Commit f5a00c7

Browse files
authored
Merge pull request #190 from ptrsd/add-user-info-to-well-known-response
Add user info to well known response
2 parents 57131b5 + d793f32 commit f5a00c7

File tree

5 files changed

+27
-3
lines changed

5 files changed

+27
-3
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ A request to `http://localhost:8080/default/.well-known/openid-configuration` wi
8585
"issuer":"http://localhost:8080/default",
8686
"authorization_endpoint":"http://localhost:8080/default/authorize",
8787
"token_endpoint":"http://localhost:8080/default/token",
88+
"userinfo_endpoint":"http://localhost:8080/default/userinfo",
8889
"jwks_uri":"http://localhost:8080/default/jwks",
8990
"response_types_supported":[
9091
"query",

src/main/kotlin/no/nav/security/mock/oauth2/debugger/Client.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,4 @@ internal fun OkHttpClient.post(tokenRequest: TokenRequest): String =
7777
.url(tokenRequest.url)
7878
.post(tokenRequest.body.toRequestBody("application/x-www-form-urlencoded".toMediaType()))
7979
.build()
80-
).execute().body?.string() ?: throw RuntimeException("could not get responsebody from url=${tokenRequest.url}")
80+
).execute().body?.string() ?: throw RuntimeException("could not get response body from url=${tokenRequest.url}")

src/main/kotlin/no/nav/security/mock/oauth2/http/OAuth2HttpRequest.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import no.nav.security.mock.oauth2.extensions.isDebuggerUrl
1111
import no.nav.security.mock.oauth2.extensions.isEndSessionEndpointUrl
1212
import no.nav.security.mock.oauth2.extensions.isJwksUrl
1313
import no.nav.security.mock.oauth2.extensions.isTokenEndpointUrl
14+
import no.nav.security.mock.oauth2.extensions.isUserInfoUrl
1415
import no.nav.security.mock.oauth2.extensions.isWellKnownUrl
1516
import no.nav.security.mock.oauth2.extensions.keyValuesToMap
1617
import no.nav.security.mock.oauth2.extensions.requirePrivateKeyJwt
@@ -19,6 +20,7 @@ import no.nav.security.mock.oauth2.extensions.toEndSessionEndpointUrl
1920
import no.nav.security.mock.oauth2.extensions.toIssuerUrl
2021
import no.nav.security.mock.oauth2.extensions.toJwksUrl
2122
import no.nav.security.mock.oauth2.extensions.toTokenEndpointUrl
23+
import no.nav.security.mock.oauth2.extensions.toUserInfoUrl
2224
import no.nav.security.mock.oauth2.grant.TokenExchangeGrant
2325
import no.nav.security.mock.oauth2.http.RequestType.AUTHORIZATION
2426
import no.nav.security.mock.oauth2.http.RequestType.DEBUGGER
@@ -30,6 +32,7 @@ import no.nav.security.mock.oauth2.http.RequestType.PREFLIGHT
3032
import no.nav.security.mock.oauth2.http.RequestType.TOKEN
3133
import no.nav.security.mock.oauth2.http.RequestType.UNKNOWN
3234
import no.nav.security.mock.oauth2.http.RequestType.WELL_KNOWN
35+
import no.nav.security.mock.oauth2.http.RequestType.USER_INFO
3336
import no.nav.security.mock.oauth2.missingParameter
3437
import okhttp3.Headers
3538
import okhttp3.HttpUrl
@@ -82,6 +85,7 @@ data class OAuth2HttpRequest(
8285
url.isAuthorizationEndpointUrl() -> AUTHORIZATION
8386
url.isTokenEndpointUrl() -> TOKEN
8487
url.isEndSessionEndpointUrl() -> END_SESSION
88+
url.isUserInfoUrl() -> USER_INFO
8589
url.isJwksUrl() -> JWKS
8690
url.isDebuggerUrl() -> DEBUGGER
8791
url.isDebuggerCallbackUrl() -> DEBUGGER_CALLBACK
@@ -102,7 +106,8 @@ data class OAuth2HttpRequest(
102106
authorizationEndpoint = this.proxyAwareUrl().toAuthorizationEndpointUrl().toString(),
103107
tokenEndpoint = this.proxyAwareUrl().toTokenEndpointUrl().toString(),
104108
endSessionEndpoint = this.proxyAwareUrl().toEndSessionEndpointUrl().toString(),
105-
jwksUri = this.proxyAwareUrl().toJwksUrl().toString()
109+
jwksUri = this.proxyAwareUrl().toJwksUrl().toString(),
110+
userInfoEndpoint = this.proxyAwareUrl().toUserInfoUrl().toString()
106111
)
107112

108113
internal fun proxyAwareUrl(): HttpUrl {
@@ -135,5 +140,5 @@ data class OAuth2HttpRequest(
135140

136141
enum class RequestType {
137142
WELL_KNOWN, AUTHORIZATION, TOKEN, END_SESSION, JWKS,
138-
DEBUGGER, DEBUGGER_CALLBACK, FAVICON, PREFLIGHT, UNKNOWN
143+
DEBUGGER, DEBUGGER_CALLBACK, FAVICON, PREFLIGHT, UNKNOWN, USER_INFO
139144
}

src/main/kotlin/no/nav/security/mock/oauth2/http/OAuth2HttpResponse.kt

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ data class WellKnown(
3030
val endSessionEndpoint: String,
3131
@JsonProperty("token_endpoint")
3232
val tokenEndpoint: String,
33+
@JsonProperty("userinfo_endpoint")
34+
val userInfoEndpoint: String,
3335
@JsonProperty("jwks_uri")
3436
val jwksUri: String,
3537
@JsonProperty("response_types_supported")

src/test/kotlin/no/nav/security/mock/oauth2/http/OAuth2HttpRequestTest.kt

+16
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,20 @@ internal class OAuth2HttpRequestTest {
8080
)
8181
req2.toWellKnown().issuer shouldBe "https://fakedings.nais.io:444/mypath"
8282
}
83+
84+
@Test
85+
fun `wellKnown should contain urls exposed by mock service`() {
86+
val req1 = OAuth2HttpRequest(
87+
headers = Headers.headersOf(),
88+
method = "GET",
89+
originalUrl = "http://localhost:8080/mypath?query=1".toHttpUrl()
90+
)
91+
92+
req1.toWellKnown().issuer shouldBe "http://localhost:8080/mypath"
93+
req1.toWellKnown().userInfoEndpoint shouldBe "http://localhost:8080/mypath/userinfo"
94+
req1.toWellKnown().authorizationEndpoint shouldBe "http://localhost:8080/mypath/authorize"
95+
req1.toWellKnown().endSessionEndpoint shouldBe "http://localhost:8080/mypath/endsession"
96+
req1.toWellKnown().tokenEndpoint shouldBe "http://localhost:8080/mypath/token"
97+
req1.toWellKnown().jwksUri shouldBe "http://localhost:8080/mypath/jwks"
98+
}
8399
}

0 commit comments

Comments
 (0)