Skip to content

Commit 56eece3

Browse files
committed
✨ Add Name and ObjectID claims for OIDC providers
Signed-off-by: Yann Lacroix <yann.lacroix@advans-group.com>
1 parent e7724f3 commit 56eece3

6 files changed

Lines changed: 22 additions & 2 deletions

File tree

oauthproxy.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,11 +725,15 @@ func (p *OAuthProxy) UserInfo(rw http.ResponseWriter, req *http.Request) {
725725
Email string `json:"email"`
726726
Groups []string `json:"groups,omitempty"`
727727
PreferredUsername string `json:"preferredUsername,omitempty"`
728+
ObjectID string `json:"oid,omitempty"`
729+
Name string `json:"name,omitempty"`
728730
}{
729731
User: session.User,
730732
Email: session.Email,
731733
Groups: session.Groups,
732734
PreferredUsername: session.PreferredUsername,
735+
ObjectID: session.ObjectID,
736+
Name: session.Name,
733737
}
734738

735739
if err := json.NewEncoder(rw).Encode(userInfo); err != nil {

pkg/apis/options/providers.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,9 @@ type OIDCOptions struct {
311311
GroupsClaim string `yaml:"groupsClaim,omitempty"`
312312
// UserIDClaim indicates which claim contains the user ID
313313
// default set to 'email'
314-
UserIDClaim string `yaml:"userIDClaim,omitempty"`
314+
UserIDClaim string `yaml:"userIDClaim,omitempty"`
315+
NameClaim string `yaml:"nameClaim,omitempty"`
316+
ObjecIDClaim string `yaml:"objectIDClaim,omitempty"`
315317
// AudienceClaim allows to define any claim that is verified against the client id
316318
// By default `aud` claim is used for verification.
317319
AudienceClaims []string `yaml:"audienceClaims,omitempty"`

pkg/apis/sessions/session_state.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ type SessionState struct {
2323

2424
Nonce []byte `msgpack:"n,omitempty"`
2525

26+
ObjectID string `msgpack:"id,omitempty"`
27+
Name string `msgpack:"name,omitempty"`
2628
Email string `msgpack:"e,omitempty"`
2729
User string `msgpack:"u,omitempty"`
2830
Groups []string `msgpack:"g,omitempty"`
@@ -108,7 +110,7 @@ func (s *SessionState) Age() time.Duration {
108110

109111
// String constructs a summary of the session state
110112
func (s *SessionState) String() string {
111-
o := fmt.Sprintf("Session{email:%s user:%s PreferredUsername:%s", s.Email, s.User, s.PreferredUsername)
113+
o := fmt.Sprintf("Session{email:%s user:%s PreferredUsername:%s oid:%s name:%s", s.Email, s.User, s.PreferredUsername, s.ObjectID, s.Name)
112114
if s.AccessToken != "" {
113115
o += " token:true"
114116
}
@@ -135,6 +137,10 @@ func (s *SessionState) GetClaim(claim string) []string {
135137
return []string{}
136138
}
137139
switch claim {
140+
case "name":
141+
return []string{s.Name}
142+
case "oid":
143+
return []string{s.ObjectID}
138144
case "access_token":
139145
return []string{s.AccessToken}
140146
case "id_token":

providers/oidc.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ func (p *OIDCProvider) redeemRefreshToken(ctx context.Context, s *sessions.Sessi
196196
s.User = newSession.User
197197
s.Groups = newSession.Groups
198198
s.PreferredUsername = newSession.PreferredUsername
199+
s.Name = newSession.Name
200+
s.ObjectID = newSession.ObjectID
199201
}
200202

201203
s.AccessToken = newSession.AccessToken

providers/provider_data.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ type ProviderData struct {
4646

4747
// Common OIDC options for any OIDC-based providers to consume
4848
AllowUnverifiedEmail bool
49+
ObjectIDClaim string
50+
NameClaim string
4951
UserClaim string
5052
EmailClaim string
5153
GroupsClaim string
@@ -260,6 +262,8 @@ func (p *ProviderData) buildSessionFromClaims(rawIDToken, accessToken string) (*
260262
{p.UserClaim, &ss.User},
261263
{p.EmailClaim, &ss.Email},
262264
{p.GroupsClaim, &ss.Groups},
265+
{p.ObjectIDClaim, &ss.ObjectID},
266+
{p.NameClaim, &ss.Name},
263267
// TODO (@NickMeves) Deprecate for dynamic claim to session mapping
264268
{"preferred_username", &ss.PreferredUsername},
265269
} {

providers/providers.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ func newProviderDataFromConfig(providerConfig options.Provider) (*ProviderData,
147147
p.AllowUnverifiedEmail = ptr.Deref(providerConfig.OIDCConfig.InsecureAllowUnverifiedEmail, options.DefaultInsecureAllowUnverifiedEmail)
148148
p.EmailClaim = providerConfig.OIDCConfig.EmailClaim
149149
p.GroupsClaim = providerConfig.OIDCConfig.GroupsClaim
150+
p.ObjectIDClaim = providerConfig.OIDCConfig.ObjecIDClaim
151+
p.NameClaim = providerConfig.OIDCConfig.NameClaim
150152
p.SkipClaimsFromProfileURL = ptr.Deref(providerConfig.SkipClaimsFromProfileURL, options.DefaultSkipClaimsFromProfileURL)
151153

152154
// Set PKCE enabled or disabled based on discovery and force options

0 commit comments

Comments
 (0)