Skip to content

Commit 6505490

Browse files
committed
feat: use oidc
1 parent 0f96f6c commit 6505490

File tree

17 files changed

+506
-67
lines changed

17 files changed

+506
-67
lines changed

go.mod

+9-7
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@ require (
88
github.com/aws/aws-sdk-go-v2 v1.27.0
99
github.com/aws/aws-sdk-go-v2/credentials v1.17.15
1010
github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.21.7
11+
github.com/coreos/go-oidc/v3 v3.11.0
1112
github.com/go-chi/chi/v5 v5.0.12
1213
github.com/go-chi/render v1.0.3
1314
github.com/go-ldap/ldap/v3 v3.4.8
15+
github.com/golang-jwt/jwt/v4 v4.5.0
1416
github.com/prometheus/client_golang v1.19.1
1517
github.com/prometheus/common v0.53.0
1618
github.com/stretchr/testify v1.9.0
1719
github.com/wangli1030/saml v0.4.7
1820
go.etcd.io/etcd/client/v3 v3.5.13
1921
go.uber.org/zap v1.27.0
22+
golang.org/x/oauth2 v0.21.0
2023
k8s.io/api v0.30.0
2124
k8s.io/apimachinery v0.30.0
2225
k8s.io/client-go v0.30.0
@@ -50,6 +53,7 @@ require (
5053
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
5154
github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect
5255
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
56+
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
5357
github.com/go-logr/logr v1.4.1 // indirect
5458
github.com/gogo/protobuf v1.3.2 // indirect
5559
github.com/golang/protobuf v1.5.4 // indirect
@@ -73,14 +77,12 @@ require (
7377
go.etcd.io/etcd/api/v3 v3.5.13 // indirect
7478
go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect
7579
go.uber.org/multierr v1.11.0 // indirect
76-
golang.org/x/crypto v0.21.0 // indirect
77-
golang.org/x/net v0.23.0 // indirect
78-
golang.org/x/oauth2 v0.18.0 // indirect
79-
golang.org/x/sys v0.18.0 // indirect
80-
golang.org/x/term v0.18.0 // indirect
81-
golang.org/x/text v0.14.0 // indirect
80+
golang.org/x/crypto v0.25.0 // indirect
81+
golang.org/x/net v0.27.0 // indirect
82+
golang.org/x/sys v0.22.0 // indirect
83+
golang.org/x/term v0.22.0 // indirect
84+
golang.org/x/text v0.16.0 // indirect
8285
golang.org/x/time v0.3.0 // indirect
83-
google.golang.org/appengine v1.6.7 // indirect
8486
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect
8587
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
8688
google.golang.org/grpc v1.59.0 // indirect

go.sum

+20-15
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2222
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
2323
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
2424
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
25+
github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI=
26+
github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0=
2527
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
2628
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
2729
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
@@ -48,6 +50,8 @@ github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
4850
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
4951
github.com/go-chi/render v1.0.3 h1:AsXqd2a1/INaIfUSKq3G5uA8weYx20FOsM7uSoCyyt4=
5052
github.com/go-chi/render v1.0.3/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0=
53+
github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk=
54+
github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
5155
github.com/go-ldap/ldap/v3 v3.4.8 h1:loKJyspcRezt2Q3ZRMq2p/0v8iOurlmeXDPw6fikSvQ=
5256
github.com/go-ldap/ldap/v3 v3.4.8/go.mod h1:qS3Sjlu76eHfHGpUdWkAXQTw4beih+cHsco2jXlIXrk=
5357
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
@@ -65,7 +69,8 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4
6569
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
6670
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
6771
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
68-
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
72+
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
73+
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
6974
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
7075
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
7176
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
@@ -196,14 +201,14 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
196201
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
197202
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
198203
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
199-
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
200204
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
205+
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
206+
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
201207
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
202208
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
203209
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
204210
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
205211
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
206-
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
207212
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
208213
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
209214
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -215,10 +220,10 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
215220
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
216221
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
217222
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
218-
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
219-
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
220-
golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
221-
golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
223+
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
224+
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
225+
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
226+
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
222227
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
223228
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
224229
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -234,23 +239,25 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
234239
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
235240
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
236241
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
237-
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
238242
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
243+
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
244+
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
239245
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
240246
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
241247
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
242248
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
243249
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
244-
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
245250
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
251+
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
252+
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
246253
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
247-
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
248254
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
249255
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
250256
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
251257
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
252-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
253258
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
259+
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
260+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
254261
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
255262
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
256263
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -259,14 +266,12 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
259266
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
260267
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
261268
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
262-
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
263-
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
269+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
270+
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
264271
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
265272
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
266273
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
267274
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
268-
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
269-
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
270275
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY=
271276
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
272277
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q=

internal/rbac/user.go

+36-8
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,45 @@
55
*/
66
package rbac
77

8-
import "net/http"
8+
import (
9+
"net/http"
10+
11+
"github.com/golang-jwt/jwt/v4"
12+
)
913

1014
type User struct {
11-
Surname string `json:"Surname,omitempty"`
12-
Givenname string `json:"Givenname,omitempty"`
13-
UID string `json:"UID,omitempty"`
14-
Displayname string `json:"Displayname,omitempty"`
15-
Emailaddress string `json:"Emailaddress,omitempty"`
15+
Surname string `json:"Surname,omitempty"`
16+
Givenname string `json:"Givenname,omitempty"`
17+
UID string `json:"UID,omitempty"`
18+
Displayname string `json:"Displayname,omitempty"`
19+
Emailaddress string `json:"Emailaddress,omitempty"`
20+
AdGroups []string `json:"roles,omitempty"`
21+
}
22+
23+
type ThelivUser struct {
24+
jwt.RegisteredClaims
25+
DisplayName string `json:"displayName,omitempty"`
26+
GivenName string `json:"givenName,omitempty"`
27+
JobTitle string `json:"jobTitle,omitempty"`
28+
Mail string `json:"mail,omitempty"`
29+
Email string `json:"email,omitempty"`
30+
Surname string `json:"surname,omitempty"`
31+
UserPrincipalName string `json:"userPrincipalName,omitempty"`
32+
Upn string `json:"upn"`
33+
Groups []string `json:"groups,omitempty"`
34+
}
35+
36+
type UserInfo struct {
37+
Name string `json:"name"`
38+
FamilyName string `json:"family_name"`
39+
GivenName string `json:"given_name"`
40+
Email string `json:"email"`
41+
Upn string `json:"upn"`
42+
OnBehalf string `json:"onbehalf"` // on behalf of user name -- corpid
43+
Roles []string `json:"roles"`
44+
jwt.StandardClaims
1645
}
1746

1847
type RBACInfo interface {
19-
GetUser(r *http.Request) (*User, error)
20-
GetADgroups(r *http.Request, id string) ([]string, error)
48+
GetUser(r *http.Request, getAd bool) (*User, error)
2149
}

main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"net/http"
1313
"strings"
1414

15-
"github.com/fidelity/theliv/pkg/auth/samlmethod"
15+
"github.com/fidelity/theliv/pkg/auth/oidcmethod"
1616
"github.com/fidelity/theliv/pkg/config"
1717
log "github.com/fidelity/theliv/pkg/log"
1818
"github.com/fidelity/theliv/pkg/router"
@@ -42,7 +42,7 @@ func main() {
4242
}
4343

4444
conf.LoadConfigs()
45-
samlmethod.Init()
45+
oidcmethod.InitAuth()
4646

4747
r := router.NewRouter()
4848

pkg/auth/authmiddleware/authmiddleware.go

+10-15
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import (
1212

1313
"github.com/fidelity/theliv/internal/rbac"
1414
"github.com/fidelity/theliv/pkg/auth/localmethod"
15-
"github.com/fidelity/theliv/pkg/auth/samlmethod"
15+
"github.com/fidelity/theliv/pkg/auth/oidcmethod"
1616
"github.com/fidelity/theliv/pkg/config"
17-
"github.com/wangli1030/saml/samlsp"
1817
)
1918

2019
var ErrNotThisAuth = errors.New("not this Auth method")
@@ -23,8 +22,8 @@ var authMethod rbac.RBACInfo
2322
func StartAuth(handler http.Handler) http.Handler {
2423
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2524
//whitelist path
26-
auth := config.GetThelivConfig().Auth
27-
if r.URL.Path == "/theliv-api/v1/health" || r.URL.Path == "/theliv-api/v1/metrics" || r.URL.Path == getUrlPath(auth.AcrURL) || r.URL.Path == getUrlPath(auth.MetadataURL) {
25+
oidc := config.GetThelivConfig().Oidc
26+
if r.URL.Path == "/theliv-api/v1/health" || r.URL.Path == "/theliv-api/v1/metrics" || r.URL.Path == getUrlPath(oidc.CallBack) {
2827
handler.ServeHTTP(w, r)
2928
return
3029
}
@@ -45,10 +44,10 @@ func StartAuth(handler http.Handler) http.Handler {
4544
return
4645
}
4746
if err.Error() == ErrNotThisAuth.Error() {
48-
//saml auth
49-
r, err = samlmethod.CheckAuthorization(r)
47+
//oidc auth
48+
r, err = oidcmethod.CheckAuthorization(r)
5049
if err == nil {
51-
authMethod = samlmethod.Samlinfo{}
50+
authMethod = oidcmethod.OIDC{}
5251
ok, err := checkRBAC(r)
5352
if err != nil {
5453
http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -61,21 +60,17 @@ func StartAuth(handler http.Handler) http.Handler {
6160
}
6261
return
6362
}
64-
if err == samlsp.ErrNoSession {
65-
samlmethod.HandleStartAuthFlow(w, r)
63+
if err == oidcmethod.ErrNoIDFound {
64+
oidcmethod.HandleStartAuthFlow(w, r)
6665
return
6766
}
6867
}
6968
http.Error(w, err.Error(), http.StatusInternalServerError)
7069
})
7170
}
7271

73-
func GetUser(r *http.Request) (*rbac.User, error) {
74-
return authMethod.GetUser(r)
75-
}
76-
77-
func GetADgroups(r *http.Request, id string) ([]string, error) {
78-
return authMethod.GetADgroups(r, id)
72+
func GetUser(r *http.Request, getAds bool) (*rbac.User, error) {
73+
return authMethod.GetUser(r, getAds)
7974
}
8075

8176
func getUrlPath(p string) string {

pkg/auth/authmiddleware/checkauth.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
package authmiddleware
77

88
import (
9+
"context"
910
"errors"
1011
"net/http"
1112
"strings"
12-
"context"
1313

1414
"github.com/fidelity/theliv/pkg/config"
1515
"github.com/fidelity/theliv/pkg/database/etcd"
@@ -42,7 +42,7 @@ func getPath(ctx context.Context, role string) ([]string, error) {
4242
}
4343

4444
func checkRBAC(r *http.Request) (bool, error) {
45-
user, err := GetUser(r)
45+
user, err := GetUser(r, true)
4646
if err != nil {
4747
return false, err
4848
}
@@ -64,10 +64,8 @@ func checkRBAC(r *http.Request) (bool, error) {
6464
if err != nil {
6565
return false, err
6666
}
67-
adgroups, err := GetADgroups(r, user.UID)
68-
if err != nil {
69-
return false, err
70-
}
67+
adgroups := user.AdGroups
68+
7169
roles = append(roles, adgroups...)
7270
var grantPath []string
7371
for _, role := range roles {

pkg/auth/localmethod/localmethod.go

+1-8
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func CheckAuthorization(r *http.Request) (*http.Request, error) {
3333
type Localinfo struct {
3434
}
3535

36-
func (Localinfo) GetUser(r *http.Request) (*rbac.User, error) {
36+
func (Localinfo) GetUser(r *http.Request, getAd bool) (*rbac.User, error) {
3737
userinfo := &rbac.User{}
3838
accesskey := r.Header.Get("ACCESSKEY")
3939
err := etcd.GetObject(accesskeyPrefix+accesskey, userinfo)
@@ -42,10 +42,3 @@ func (Localinfo) GetUser(r *http.Request) (*rbac.User, error) {
4242
}
4343
return nil, err
4444
}
45-
46-
func (Localinfo) GetADgroups(r *http.Request, id string) ([]string, error) {
47-
if true {
48-
return nil, nil
49-
}
50-
return nil, errors.New("not Authorized")
51-
}

0 commit comments

Comments
 (0)