@@ -18,26 +18,9 @@ import (
18
18
var (
19
19
USER_HEADER = env .GetEnvOrDefault ("USERID_HEADER" , "kubeflow-userid" )
20
20
USER_PREFIX = env .GetEnvOrDefault ("USERID_PREFIX" , ":" )
21
- DISABLE_AUTH = env .GetEnvOrDefault ("APP_DISABLE_AUTH" , "false " )
21
+ DISABLE_AUTH = env .GetEnvOrDefault ("APP_DISABLE_AUTH" , "true " )
22
22
)
23
23
24
- func GetUsername (r * http.Request ) (string , error ) {
25
- var username string
26
- if DISABLE_AUTH == "true" {
27
- log .Printf ("APP_DISABLE_AUTH set to True. Skipping authentication check" )
28
- return "" , nil
29
- }
30
-
31
- if r .Header .Get (USER_HEADER ) == "" {
32
- return "" , errors .New ("user header not present" )
33
- }
34
-
35
- user := r .Header .Get (USER_HEADER )
36
- username = strings .Replace (user , USER_PREFIX , "" , 1 )
37
-
38
- return username , nil
39
- }
40
-
41
24
// Function for constructing SubjectAccessReviews (SAR) objects
42
25
func CreateSAR (user , verb , namespace , resource , subresource , name string , schema schema.GroupVersion ) * v1.SubjectAccessReview {
43
26
@@ -58,28 +41,34 @@ func CreateSAR(user, verb, namespace, resource, subresource, name string, schema
58
41
return sar
59
42
}
60
43
61
- func IsAuthorized (user , verb , namespace , resource , subresource , name string , schema schema.GroupVersion , client client.Client ) error {
44
+ func IsAuthorized (verb , namespace , resource , subresource , name string , schema schema.GroupVersion , client client.Client , r * http. Request ) ( string , error ) {
62
45
63
- // Skip authz when admin is explicity requested it
46
+ // We disable authn/ authz checks when in standalone mode.
64
47
if DISABLE_AUTH == "true" {
65
- log .Printf ("APP_DISABLE_AUTH set to True. Skipping authorization check " )
66
- return nil
48
+ log .Printf ("APP_DISABLE_AUTH set to True. Skipping authentication/ authorization checks " )
49
+ return "" , nil
67
50
}
51
+ // Check if an incoming request is from an authenticated user (kubeflow mode: kubeflow-userid header)
52
+ if r .Header .Get (USER_HEADER ) == "" {
53
+ return "" , errors .New ("user header not present" )
54
+ }
55
+ user := r .Header .Get (USER_HEADER )
56
+ user = strings .Replace (user , USER_PREFIX , "" , 1 )
68
57
58
+ // Check if the user is authorized to perform a given action on katib/k8s resources.
69
59
sar := CreateSAR (user , verb , namespace , resource , subresource , name , schema )
70
-
71
60
err := client .Create (context .TODO (), sar )
72
61
if err != nil {
73
62
log .Printf ("Error submitting SubjectAccessReview: %v, %s" , sar , err .Error ())
74
- return err
63
+ return user , err
75
64
}
76
65
77
66
if sar .Status .Allowed {
78
- return nil
67
+ return user , nil
79
68
}
80
69
81
70
msg := generateUnauthorizedMessage (user , verb , namespace , resource , subresource , schema , sar )
82
- return errors .New (msg )
71
+ return user , errors .New (msg )
83
72
}
84
73
85
74
func generateUnauthorizedMessage (user , verb , namespace , resource , subresource string , schema schema.GroupVersion , sar * v1.SubjectAccessReview ) string {
0 commit comments