Skip to content

Commit 6796505

Browse files
Centralized JWT Provider (#148)
* Added jwt token verify api endpoint * Added tests for token verify endpoint * Added Identity Service URL env variable to workshop and community service * Chore: Fixed response code for token verify endpoint * Migrated to using Identity service for token verification in Community service * Fixed community service build * Fixed formatting issue * Migrated to using Identity service for token verification in Workshop service * Fixed unittests in workshop service * Fixed response status code of jwt verify endpoint * Removed JWT_SECRET variable from workshop and community services * - Added private key for jwt in all deployment methods - Modified identity service entrypoint to load private key as env variables * Updated identity service to use user provided private key * Replaced PEM file with JWKS.json and serving jwks.json from well-known * Fixed public jwks.json format * Updated Postman Collections Co-authored-by: Roshan Piyush <[email protected]>
1 parent bf546b0 commit 6796505

File tree

40 files changed

+702
-407
lines changed

40 files changed

+702
-407
lines changed

deploy/docker/.keys/jwks.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"keys": [
3+
{
4+
"p": "-o_gG3DQK9540fR_-WM9dy1YgTR-WSH8FezYnH6I5jwwPB6ocni8XgkWCAiKOPYjK6nhmoTD7DBEetilFIWVj1P0G5fejp_c3H-uQQdd6JW2NBWHfWpADglIEc4NfUgjQ8cXjT1-oIJpXzpX6KOhWEP0yGNBYns7W8CNxbw58vU",
5+
"kty": "RSA",
6+
"q": "tW1D1JK53TIiip9uBVl6EGzXWPFwy8QXlZHbfg3TfhURUF5OYey9Ig-qxh74KvQ-uzwMZOYux0EdUe0OmV-p27huY-nusHjpxKL6xUxpqsLWrYTa6ygRHep3_A50ksN_XIn83oAjBlG4TEePzBsMQb6F4HDrEhpdPeYepKa5PNc",
7+
"d": "XJu0Vh3Uq5gV5UPMCfm_j6D5INgX7VjLSN8mup4LfUBkJAk9vpQmDYF8gVzpMr3YdBk_Y7MI1BapPVg2i-s2UQR4xJYwpDOfKJactGWzruvfiTOKNIc8Q87WhLl2D4_FGI2jfyYk6itCLOOk1zfZdkjLLNiQg1SDOqC28AT-qKh99wLRKiIuewbJVW5C-0D8YjlquBU6rXdKxONYKnA1NHWfJEbPtsyJIlfUs06wjiMcXrLLc6qy98LL8t0oQcGdUTN4rICGGj-uH3k7-evJyKXC_RECmbcMu2q8GkjZ7lvaVtHh3TGGAA5TTc-7kW3MUjpCLLL06erLxCn3CcGr6Q",
8+
"e": "AQAB",
9+
"use": "sig",
10+
"kid": "MKMZkDenUfuDF2byYowDj7tW5Ox6XG4Y1THTEGScRg8",
11+
"qi": "IChXZG2VaA05LVfN-nIX03sAZo7ayetTiFKrhGpdmsODw9AoCbBIx4T4SuPnQQBYVkaCAcseyB1XAjqA4Ebm2yvE6yYo-Q8nP-wEo5Mzm18UimCffMox-uSrig1uhuK9oziV-Y11Ytps8yEQq--9BzVTCs1sXAkLVSaO58kGsm4",
12+
"dp": "rl98fnxXU4BjIvJ-MWfAOfVj159ZotxE3FlVMivZSClxBBXt8qRVqze1jmerEhMxzMxQRkHJO9EnhzrIP-zrdbDefGmHqEhW41k0QutGjnvKLpshDMXpyBrrfgChYKPYbu3aVSALxNadUHmA_lUKDyxT6TUyJsBOQf9Sat8gkRU",
13+
"alg": "RS256",
14+
"dq": "d8mf-o-yJmj-w3ZGh0Ovw36JpREs_20GgVvfh1gLpvi0CNNrf1529jFP-SXjh0Di1m7sZAZTJn5IpJoXhI7UMN2SDWgcj-oVtx5A4tnz_qpMYh8RCCjZPF5eQE8vCuQHiIsXKbWC6p40SDELsaC-M_5emHUV0EsV-1OgMehe79s",
15+
"n": "sZKrGYja9S7BkO-waOcupoGY6BQjixJkg1Uitt278NbiCSnBRw5_cmfuWFFFPgRxabBZBJwJAujnQrlgTLXnRRItM9SRO884cEXn-s4Uc8qwk6pev63qb8no6aCVY0dFpthEGtOP-3KIJ2kx2i5HNzm8d7fG3ZswZrttDVbSSTy8UjPTOr4xVw1Yyh_GzGK9i_RYBWHftDsVfKrHcgGn1F_T6W0cgcnh4KFmbyOQ7dUy8Uc6Gu8JHeHJVt2vGcn50EDtUy2YN-UnZPjCSC7vYOfd5teUR_Bf4jg8GN6UnLbr_Et8HUnz9RFBLkPIf0NiY6iRjp9ooSDkml2OGql3ww"
16+
}
17+
]
18+
}
19+

deploy/docker/docker-compose.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ services:
1818
image: crapi/crapi-identity:${VERSION:-latest}
1919
#ports:
2020
# - "127.0.0.1:8080:8080"
21+
volumes:
22+
- ./.keys:/.keys
2123
environment:
2224
- DB_NAME=crapi
2325
- DB_USER=admin
@@ -60,6 +62,7 @@ services:
6062
#ports:
6163
# - "127.0.0.1:8087:8087"
6264
environment:
65+
- IDENTITY_SERVICE=crapi-identity:${IDENTITY_SERVER_PORT:-8080}
6366
- DB_NAME=crapi
6467
- DB_USER=admin
6568
- DB_PASSWORD=crapisecretpassword
@@ -71,7 +74,6 @@ services:
7174
- MONGO_DB_USER=admin
7275
- MONGO_DB_PASSWORD=crapisecretpassword
7376
- MONGO_DB_NAME=crapi
74-
- JWT_SECRET=crapi
7577
depends_on:
7678
postgresdb:
7779
condition: service_healthy
@@ -96,6 +98,7 @@ services:
9698
#ports:
9799
# - "127.0.0.1:8000:8000"
98100
environment:
101+
- IDENTITY_SERVICE=crapi-identity:${IDENTITY_SERVER_PORT:-8080}
99102
- DB_NAME=crapi
100103
- DB_USER=admin
101104
- DB_PASSWORD=crapisecretpassword
@@ -107,7 +110,6 @@ services:
107110
- MONGO_DB_USER=admin
108111
- MONGO_DB_PASSWORD=crapisecretpassword
109112
- MONGO_DB_NAME=crapi
110-
- JWT_SECRET=crapi
111113
- SECRET_KEY=crapi
112114
depends_on:
113115
postgresdb:

deploy/helm/keys/jwks.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"keys": [
3+
{
4+
"p": "-o_gG3DQK9540fR_-WM9dy1YgTR-WSH8FezYnH6I5jwwPB6ocni8XgkWCAiKOPYjK6nhmoTD7DBEetilFIWVj1P0G5fejp_c3H-uQQdd6JW2NBWHfWpADglIEc4NfUgjQ8cXjT1-oIJpXzpX6KOhWEP0yGNBYns7W8CNxbw58vU",
5+
"kty": "RSA",
6+
"q": "tW1D1JK53TIiip9uBVl6EGzXWPFwy8QXlZHbfg3TfhURUF5OYey9Ig-qxh74KvQ-uzwMZOYux0EdUe0OmV-p27huY-nusHjpxKL6xUxpqsLWrYTa6ygRHep3_A50ksN_XIn83oAjBlG4TEePzBsMQb6F4HDrEhpdPeYepKa5PNc",
7+
"d": "XJu0Vh3Uq5gV5UPMCfm_j6D5INgX7VjLSN8mup4LfUBkJAk9vpQmDYF8gVzpMr3YdBk_Y7MI1BapPVg2i-s2UQR4xJYwpDOfKJactGWzruvfiTOKNIc8Q87WhLl2D4_FGI2jfyYk6itCLOOk1zfZdkjLLNiQg1SDOqC28AT-qKh99wLRKiIuewbJVW5C-0D8YjlquBU6rXdKxONYKnA1NHWfJEbPtsyJIlfUs06wjiMcXrLLc6qy98LL8t0oQcGdUTN4rICGGj-uH3k7-evJyKXC_RECmbcMu2q8GkjZ7lvaVtHh3TGGAA5TTc-7kW3MUjpCLLL06erLxCn3CcGr6Q",
8+
"e": "AQAB",
9+
"use": "sig",
10+
"kid": "MKMZkDenUfuDF2byYowDj7tW5Ox6XG4Y1THTEGScRg8",
11+
"qi": "IChXZG2VaA05LVfN-nIX03sAZo7ayetTiFKrhGpdmsODw9AoCbBIx4T4SuPnQQBYVkaCAcseyB1XAjqA4Ebm2yvE6yYo-Q8nP-wEo5Mzm18UimCffMox-uSrig1uhuK9oziV-Y11Ytps8yEQq--9BzVTCs1sXAkLVSaO58kGsm4",
12+
"dp": "rl98fnxXU4BjIvJ-MWfAOfVj159ZotxE3FlVMivZSClxBBXt8qRVqze1jmerEhMxzMxQRkHJO9EnhzrIP-zrdbDefGmHqEhW41k0QutGjnvKLpshDMXpyBrrfgChYKPYbu3aVSALxNadUHmA_lUKDyxT6TUyJsBOQf9Sat8gkRU",
13+
"alg": "RS256",
14+
"dq": "d8mf-o-yJmj-w3ZGh0Ovw36JpREs_20GgVvfh1gLpvi0CNNrf1529jFP-SXjh0Di1m7sZAZTJn5IpJoXhI7UMN2SDWgcj-oVtx5A4tnz_qpMYh8RCCjZPF5eQE8vCuQHiIsXKbWC6p40SDELsaC-M_5emHUV0EsV-1OgMehe79s",
15+
"n": "sZKrGYja9S7BkO-waOcupoGY6BQjixJkg1Uitt278NbiCSnBRw5_cmfuWFFFPgRxabBZBJwJAujnQrlgTLXnRRItM9SRO884cEXn-s4Uc8qwk6pev63qb8no6aCVY0dFpthEGtOP-3KIJ2kx2i5HNzm8d7fG3ZswZrttDVbSSTy8UjPTOr4xVw1Yyh_GzGK9i_RYBWHftDsVfKrHcgGn1F_T6W0cgcnh4KFmbyOQ7dUy8Uc6Gu8JHeHJVt2vGcn50EDtUy2YN-UnZPjCSC7vYOfd5teUR_Bf4jg8GN6UnLbr_Et8HUnz9RFBLkPIf0NiY6iRjp9ooSDkml2OGql3ww"
16+
}
17+
]
18+
}
19+

deploy/helm/templates/community/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ metadata:
88
{{- toYaml . | nindent 4 }}
99
{{- end }}
1010
data:
11+
IDENTITY_SERVICE: {{ .Values.identity.service.name }}:{{ .Values.identity.port }}
1112
DB_HOST: {{ .Values.postgresdb.service.name }}
1213
DB_DRIVER: {{ .Values.community.config.postgresDbDriver }}
13-
JWT_SECRET: {{ .Values.jwtSecret }}
1414
DB_USER: {{ .Values.postgresdb.config.postgresUser }}
1515
DB_PASSWORD: {{ .Values.postgresdb.config.postgresPassword }}
1616
DB_NAME: {{ .Values.postgresdb.config.postgresDbName }}

deploy/helm/templates/identity/deployment.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ spec:
2525
args:
2626
- "service"
2727
- {{ .Values.postgresdb.service.name | quote }}
28+
volumes:
29+
- name: jwt-key-secret
30+
secret:
31+
secretName: {{ .Values.identity.jwtKeySecret.name }}
2832
containers:
2933
- name: {{ .Values.identity.name }}
3034
image: {{ .Values.identity.image }}:{{ .Chart.AppVersion }}
3135
imagePullPolicy: {{ .Values.imagePullPolicy }}
36+
volumeMounts:
37+
- mountPath: "/.keys"
38+
name: jwt-key-secret
39+
readOnly: true
3240
ports:
3341
- containerPort: {{ .Values.identity.port }}
3442
envFrom:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: {{ .Values.identity.jwtKeySecret.name }}
5+
labels:
6+
release: {{ .Release.Name }}
7+
{{- with .Values.identity.config.labels }}
8+
{{- toYaml . | nindent 4 }}
9+
{{- end }}
10+
type: Opaque
11+
data:
12+
{{ (.Files.Glob .Values.identity.jwtKeySecret.file).AsSecrets | indent 2 }}

deploy/helm/templates/workshop/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ metadata:
66
release: {{ .Release.Name }}
77
{{- toYaml .Values.workshop.config.labels | nindent 4 }}
88
data:
9+
IDENTITY_SERVICE: {{ .Values.identity.service.name }}:{{ .Values.identity.port }}
910
SECRET_KEY: {{ .Values.workshop.config.secretKey }}
1011
DB_HOST: {{ .Values.postgresdb.service.name }}
1112
DB_DRIVER: {{ .Values.workshop.config.postgresDbDriver }}
12-
JWT_SECRET: {{ .Values.jwtSecret }}
1313
DB_USER: {{ .Values.postgresdb.config.postgresUser }}
1414
DB_PASSWORD: {{ .Values.postgresdb.config.postgresPassword }}
1515
DB_NAME: {{ .Values.postgresdb.config.postgresDbName }}

deploy/helm/values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ identity:
4848
name: crapi-identity
4949
labels:
5050
app: crapi-identity
51+
jwtKeySecret:
52+
name: jwt-key-secret
53+
file: keys/jwks.json
54+
labels:
55+
app: crapi-identity
5156
config:
5257
name: crapi-identity-configmap
5358
labels:

deploy/k8s/base/community/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ metadata:
55
labels:
66
app: crapi-community
77
data:
8+
IDENTITY_SERVICE: crapi-identity:8080
89
DB_HOST: postgresdb
910
DB_DRIVER: postgres
10-
JWT_SECRET: crapi
1111
DB_USER: admin
1212
DB_PASSWORD: crapisecretpassword
1313
DB_NAME: crapi

deploy/k8s/base/deploy.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ cd "$(dirname $0)"
33
kubectl create namespace crapi
44
#kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
55

6+
kubectl create -n secret generic jwt-key-secret --from-file=../keys
67
kubectl apply -n crapi -f ./rbac
78
kubectl apply -n crapi -f ./mongodb
89
kubectl apply -n crapi -f ./postgres

0 commit comments

Comments
 (0)