git.iko.soy/typeable/oauth2-proxy
on master help sign in
Move azure specific resource parameter handling into azure provider
fde09beAlexander Block
providers/azure.go+9
@@ -210,3 +210,12 @@ func (p *AzureProvider) GetEmailAddress(ctx context.Context, s *sessions.Session
210
210
211 return email, err
211 return email, err
212}
212}
213+
214+func (p *AzureProvider) GetLoginURL(redirectURI, state string) string {
215+ a, params := DefaultGetLoginURL(p.ProviderData, redirectURI, state)
216+ if p.ProtectedResource != nil && p.ProtectedResource.String() != "" {
217+ params.Add("resource", p.ProtectedResource.String())
218+ }
219+ a.RawQuery = params.Encode()
220+ return a.String()
221+}
providers/azure_test.go+7
@@ -213,3 +213,10 @@ func TestAzureProviderRedeemReturnsIdToken(t *testing.T) {
213 assert.Equal(t, timestamp, s.ExpiresOn.UTC())
213 assert.Equal(t, timestamp, s.ExpiresOn.UTC())
214 assert.Equal(t, "refresh1234", s.RefreshToken)
214 assert.Equal(t, "refresh1234", s.RefreshToken)
215}
215}
216+
217+func TestAzureProviderProtectedResourceConfigured(t *testing.T) {
218+ p := testAzureProvider("")
219+ p.ProtectedResource, _ = url.Parse("http://my.resource.test")
220+ result := p.GetLoginURL("https://my.test.app/oauth", "")
221+ assert.Contains(t, result, "resource="+url.QueryEscape("http://my.resource.test"))
222+}
providers/provider_default.go−3
@@ -89,9 +89,6 @@ func DefaultGetLoginURL(p *ProviderData, redirectURI, state string) (url.URL, ur
89 params.Set("client_id", p.ClientID)
89 params.Set("client_id", p.ClientID)
90 params.Set("response_type", "code")
90 params.Set("response_type", "code")
91 params.Add("state", state)
91 params.Add("state", state)
92− if p.ProtectedResource != nil && p.ProtectedResource.String() != "" {
93− params.Add("resource", p.ProtectedResource.String())
94− }
95 return a, params
92 return a, params
96}
93}
97
94
providers/provider_default_test.go−18
@@ -47,21 +47,3 @@ func TestAcrValuesConfigured(t *testing.T) {
47 result := p.GetLoginURL("https://my.test.app/oauth", "")
47 result := p.GetLoginURL("https://my.test.app/oauth", "")
48 assert.Contains(t, result, "acr_values=testValue")
48 assert.Contains(t, result, "acr_values=testValue")
49}
49}
50−
51−func TestProtectedResourceConfigured(t *testing.T) {
52− p := &ProviderData{
53− LoginURL: &url.URL{
54− Scheme: "http",
55− Host: "my.test.idp",
56− Path: "/oauth/authorize",
57− },
58− AcrValues: "testValue",
59− ProtectedResource: &url.URL{
60− Scheme: "http",
61− Host: "my.resource.test",
62− },
63− }
64−
65− result := p.GetLoginURL("https://my.test.app/oauth", "")
66− assert.Contains(t, result, "resource="+url.QueryEscape("http://my.resource.test"))
67−}