mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2026-10-18 04:41:19 +02:00
Integrate new header injectors with OAuth2 Proxy
This commit is contained in:
@@ -73,10 +73,6 @@ func Validate(o *options.Options) error {
|
||||
"\n use email-domain=* to authorize all email addresses")
|
||||
}
|
||||
|
||||
if o.SetBasicAuth && o.SetAuthorization {
|
||||
msgs = append(msgs, "mutually exclusive: set-basic-auth and set-authorization-header can not both be true")
|
||||
}
|
||||
|
||||
if o.OIDCIssuerURL != "" {
|
||||
|
||||
ctx := context.Background()
|
||||
@@ -161,10 +157,6 @@ func Validate(o *options.Options) error {
|
||||
}
|
||||
}
|
||||
|
||||
if o.PreferEmailToUser && !o.PassBasicAuth && !o.PassUserHeaders {
|
||||
msgs = append(msgs, "PreferEmailToUser should only be used with PassBasicAuth or PassUserHeaders")
|
||||
}
|
||||
|
||||
if o.SkipJwtBearerTokens {
|
||||
// Configure extra issuers
|
||||
if len(o.ExtraJwtIssuers) > 0 {
|
||||
|
||||
@@ -162,29 +162,6 @@ func TestDefaultProviderApiSettings(t *testing.T) {
|
||||
assert.Equal(t, "profile email", p.Scope)
|
||||
}
|
||||
|
||||
func TestPassAccessTokenRequiresSpecificCookieSecretLengths(t *testing.T) {
|
||||
o := testOptions()
|
||||
assert.Equal(t, nil, Validate(o))
|
||||
|
||||
assert.Equal(t, false, o.PassAccessToken)
|
||||
o.PassAccessToken = true
|
||||
o.Cookie.Secret = "cookie of invalid length-"
|
||||
assert.NotEqual(t, nil, Validate(o))
|
||||
|
||||
o.PassAccessToken = false
|
||||
o.Cookie.Refresh = time.Duration(24) * time.Hour
|
||||
assert.NotEqual(t, nil, Validate(o))
|
||||
|
||||
o.Cookie.Secret = "16 bytes AES-128"
|
||||
assert.Equal(t, nil, Validate(o))
|
||||
|
||||
o.Cookie.Secret = "24 byte secret AES-192--"
|
||||
assert.Equal(t, nil, Validate(o))
|
||||
|
||||
o.Cookie.Secret = "32 byte secret for AES-256------"
|
||||
assert.Equal(t, nil, Validate(o))
|
||||
}
|
||||
|
||||
func TestCookieRefreshMustBeLessThanCookieExpire(t *testing.T) {
|
||||
o := testOptions()
|
||||
assert.Equal(t, nil, Validate(o))
|
||||
|
||||
+14
-11
@@ -16,18 +16,21 @@ func validateSessionCookieMinimal(o *options.Options) []string {
|
||||
}
|
||||
|
||||
msgs := []string{}
|
||||
if o.PassAuthorization {
|
||||
msgs = append(msgs,
|
||||
"pass_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set")
|
||||
}
|
||||
if o.SetAuthorization {
|
||||
msgs = append(msgs,
|
||||
"set_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set")
|
||||
}
|
||||
if o.PassAccessToken {
|
||||
msgs = append(msgs,
|
||||
"pass_access_token requires oauth tokens in sessions. session_cookie_minimal cannot be set")
|
||||
for _, header := range append(o.InjectRequestHeaders, o.InjectResponseHeaders...) {
|
||||
for _, value := range header.Values {
|
||||
if value.ClaimSource != nil {
|
||||
if value.ClaimSource.Claim == "access_token" {
|
||||
msgs = append(msgs,
|
||||
fmt.Sprintf("access_token claim for header %q requires oauth tokens in sessions. session_cookie_minimal cannot be set", header.Name))
|
||||
}
|
||||
if value.ClaimSource.Claim == "id_token" {
|
||||
msgs = append(msgs,
|
||||
fmt.Sprintf("id_token claim for header %q requires oauth tokens in sessions. session_cookie_minimal cannot be set", header.Name))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if o.Cookie.Refresh != time.Duration(0) {
|
||||
msgs = append(msgs,
|
||||
"cookie_refresh > 0 requires oauth tokens in sessions. session_cookie_minimal cannot be set")
|
||||
|
||||
@@ -13,10 +13,9 @@ import (
|
||||
|
||||
var _ = Describe("Sessions", func() {
|
||||
const (
|
||||
passAuthorizationMsg = "pass_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
setAuthorizationMsg = "set_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
passAccessTokenMsg = "pass_access_token requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
cookieRefreshMsg = "cookie_refresh > 0 requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
idTokenConflictMsg = "id_token claim for header \"X-ID-Token\" requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
accessTokenConflictMsg = "access_token claim for header \"X-Access-Token\" requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
cookieRefreshMsg = "cookie_refresh > 0 requires oauth tokens in sessions. session_cookie_minimal cannot be set"
|
||||
)
|
||||
|
||||
type cookieMinimalTableInput struct {
|
||||
@@ -38,14 +37,25 @@ var _ = Describe("Sessions", func() {
|
||||
},
|
||||
errStrings: []string{},
|
||||
}),
|
||||
Entry("No minimal cookie session & passAuthorization", &cookieMinimalTableInput{
|
||||
Entry("No minimal cookie session & request header has access_token claim", &cookieMinimalTableInput{
|
||||
opts: &options.Options{
|
||||
Session: options.SessionOptions{
|
||||
Cookie: options.CookieStoreOptions{
|
||||
Minimal: false,
|
||||
},
|
||||
},
|
||||
PassAuthorization: true,
|
||||
InjectRequestHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-Access-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "access_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
errStrings: []string{},
|
||||
}),
|
||||
@@ -59,38 +69,71 @@ var _ = Describe("Sessions", func() {
|
||||
},
|
||||
errStrings: []string{},
|
||||
}),
|
||||
Entry("PassAuthorization conflict", &cookieMinimalTableInput{
|
||||
Entry("Request Header id_token conflict", &cookieMinimalTableInput{
|
||||
opts: &options.Options{
|
||||
Session: options.SessionOptions{
|
||||
Cookie: options.CookieStoreOptions{
|
||||
Minimal: true,
|
||||
},
|
||||
},
|
||||
PassAuthorization: true,
|
||||
InjectRequestHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-ID-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "id_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
errStrings: []string{passAuthorizationMsg},
|
||||
errStrings: []string{idTokenConflictMsg},
|
||||
}),
|
||||
Entry("SetAuthorization conflict", &cookieMinimalTableInput{
|
||||
Entry("Response Header id_token conflict", &cookieMinimalTableInput{
|
||||
opts: &options.Options{
|
||||
Session: options.SessionOptions{
|
||||
Cookie: options.CookieStoreOptions{
|
||||
Minimal: true,
|
||||
},
|
||||
},
|
||||
SetAuthorization: true,
|
||||
InjectResponseHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-ID-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "id_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
errStrings: []string{setAuthorizationMsg},
|
||||
errStrings: []string{idTokenConflictMsg},
|
||||
}),
|
||||
Entry("PassAccessToken conflict", &cookieMinimalTableInput{
|
||||
Entry("Request Header access_token conflict", &cookieMinimalTableInput{
|
||||
opts: &options.Options{
|
||||
Session: options.SessionOptions{
|
||||
Cookie: options.CookieStoreOptions{
|
||||
Minimal: true,
|
||||
},
|
||||
},
|
||||
PassAccessToken: true,
|
||||
InjectRequestHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-Access-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "access_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
errStrings: []string{passAccessTokenMsg},
|
||||
errStrings: []string{accessTokenConflictMsg},
|
||||
}),
|
||||
Entry("CookieRefresh conflict", &cookieMinimalTableInput{
|
||||
opts: &options.Options{
|
||||
@@ -112,10 +155,32 @@ var _ = Describe("Sessions", func() {
|
||||
Minimal: true,
|
||||
},
|
||||
},
|
||||
PassAuthorization: true,
|
||||
PassAccessToken: true,
|
||||
InjectResponseHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-ID-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "id_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
InjectRequestHeaders: []options.Header{
|
||||
{
|
||||
Name: "X-Access-Token",
|
||||
Values: []options.HeaderValue{
|
||||
{
|
||||
ClaimSource: &options.ClaimSource{
|
||||
Claim: "access_token",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
errStrings: []string{passAuthorizationMsg, passAccessTokenMsg},
|
||||
errStrings: []string{idTokenConflictMsg, accessTokenConflictMsg},
|
||||
}),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user