Browse code

Add PKCE support

Jordan Liggitt authored on 2016/09/11 03:41:32
Showing 14 changed files
... ...
@@ -25842,6 +25842,14 @@
25842 25842
      "userUID": {
25843 25843
       "type": "string",
25844 25844
       "description": "UserUID is the unique UID associated with this token. UserUID and UserName must both match for this token to be valid."
25845
+     },
25846
+     "codeChallenge": {
25847
+      "type": "string",
25848
+      "description": "CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636"
25849
+     },
25850
+     "codeChallengeMethod": {
25851
+      "type": "string",
25852
+      "description": "CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636"
25845 25853
      }
25846 25854
     }
25847 25855
    },
... ...
@@ -418,6 +418,12 @@ func fuzzInternalObject(t *testing.T, forVersion unversioned.GroupVersion, item
418 418
 			j.Spec.Template.Spec.InitContainers = nil
419 419
 			j.Status.Template.Spec.InitContainers = nil
420 420
 		},
421
+		func(j *oauthapi.OAuthAuthorizeToken, c fuzz.Continue) {
422
+			c.FuzzNoCustom(j)
423
+			if len(j.CodeChallenge) > 0 && len(j.CodeChallengeMethod) == 0 {
424
+				j.CodeChallengeMethod = "plain"
425
+			}
426
+		},
421 427
 		func(j *oauthapi.OAuthClientAuthorization, c fuzz.Continue) {
422 428
 			c.FuzzNoCustom(j)
423 429
 			if len(j.Scopes) == 0 {
... ...
@@ -59,6 +59,12 @@ type OAuthAuthorizeToken struct {
59 59
 	// UserUID is the unique UID associated with this token. UserUID and UserName must both match
60 60
 	// for this token to be valid.
61 61
 	UserUID string
62
+
63
+	// CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636
64
+	CodeChallenge string
65
+
66
+	// CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636
67
+	CodeChallengeMethod string
62 68
 }
63 69
 
64 70
 // +genclient=true
65 71
new file mode 100644
... ...
@@ -0,0 +1,15 @@
0
+package v1
1
+
2
+import "k8s.io/kubernetes/pkg/runtime"
3
+
4
+func SetDefaults_OAuthAuthorizeToken(obj *OAuthAuthorizeToken) {
5
+	if len(obj.CodeChallenge) > 0 && len(obj.CodeChallengeMethod) == 0 {
6
+		obj.CodeChallengeMethod = "plain"
7
+	}
8
+}
9
+
10
+func addDefaultingFuncs(scheme *runtime.Scheme) error {
11
+	return scheme.AddDefaultingFuncs(
12
+		SetDefaults_OAuthAuthorizeToken,
13
+	)
14
+}
... ...
@@ -321,6 +321,14 @@ func (m *OAuthAuthorizeToken) MarshalTo(data []byte) (int, error) {
321 321
 	i++
322 322
 	i = encodeVarintGenerated(data, i, uint64(len(m.UserUID)))
323 323
 	i += copy(data[i:], m.UserUID)
324
+	data[i] = 0x4a
325
+	i++
326
+	i = encodeVarintGenerated(data, i, uint64(len(m.CodeChallenge)))
327
+	i += copy(data[i:], m.CodeChallenge)
328
+	data[i] = 0x52
329
+	i++
330
+	i = encodeVarintGenerated(data, i, uint64(len(m.CodeChallengeMethod)))
331
+	i += copy(data[i:], m.CodeChallengeMethod)
324 332
 	return i, nil
325 333
 }
326 334
 
... ...
@@ -727,6 +735,10 @@ func (m *OAuthAuthorizeToken) Size() (n int) {
727 727
 	n += 1 + l + sovGenerated(uint64(l))
728 728
 	l = len(m.UserUID)
729 729
 	n += 1 + l + sovGenerated(uint64(l))
730
+	l = len(m.CodeChallenge)
731
+	n += 1 + l + sovGenerated(uint64(l))
732
+	l = len(m.CodeChallengeMethod)
733
+	n += 1 + l + sovGenerated(uint64(l))
730 734
 	return n
731 735
 }
732 736
 
... ...
@@ -906,6 +918,8 @@ func (this *OAuthAuthorizeToken) String() string {
906 906
 		`State:` + fmt.Sprintf("%v", this.State) + `,`,
907 907
 		`UserName:` + fmt.Sprintf("%v", this.UserName) + `,`,
908 908
 		`UserUID:` + fmt.Sprintf("%v", this.UserUID) + `,`,
909
+		`CodeChallenge:` + fmt.Sprintf("%v", this.CodeChallenge) + `,`,
910
+		`CodeChallengeMethod:` + fmt.Sprintf("%v", this.CodeChallengeMethod) + `,`,
909 911
 		`}`,
910 912
 	}, "")
911 913
 	return s
... ...
@@ -1785,6 +1799,64 @@ func (m *OAuthAuthorizeToken) Unmarshal(data []byte) error {
1785 1785
 			}
1786 1786
 			m.UserUID = string(data[iNdEx:postIndex])
1787 1787
 			iNdEx = postIndex
1788
+		case 9:
1789
+			if wireType != 2 {
1790
+				return fmt.Errorf("proto: wrong wireType = %d for field CodeChallenge", wireType)
1791
+			}
1792
+			var stringLen uint64
1793
+			for shift := uint(0); ; shift += 7 {
1794
+				if shift >= 64 {
1795
+					return ErrIntOverflowGenerated
1796
+				}
1797
+				if iNdEx >= l {
1798
+					return io.ErrUnexpectedEOF
1799
+				}
1800
+				b := data[iNdEx]
1801
+				iNdEx++
1802
+				stringLen |= (uint64(b) & 0x7F) << shift
1803
+				if b < 0x80 {
1804
+					break
1805
+				}
1806
+			}
1807
+			intStringLen := int(stringLen)
1808
+			if intStringLen < 0 {
1809
+				return ErrInvalidLengthGenerated
1810
+			}
1811
+			postIndex := iNdEx + intStringLen
1812
+			if postIndex > l {
1813
+				return io.ErrUnexpectedEOF
1814
+			}
1815
+			m.CodeChallenge = string(data[iNdEx:postIndex])
1816
+			iNdEx = postIndex
1817
+		case 10:
1818
+			if wireType != 2 {
1819
+				return fmt.Errorf("proto: wrong wireType = %d for field CodeChallengeMethod", wireType)
1820
+			}
1821
+			var stringLen uint64
1822
+			for shift := uint(0); ; shift += 7 {
1823
+				if shift >= 64 {
1824
+					return ErrIntOverflowGenerated
1825
+				}
1826
+				if iNdEx >= l {
1827
+					return io.ErrUnexpectedEOF
1828
+				}
1829
+				b := data[iNdEx]
1830
+				iNdEx++
1831
+				stringLen |= (uint64(b) & 0x7F) << shift
1832
+				if b < 0x80 {
1833
+					break
1834
+				}
1835
+			}
1836
+			intStringLen := int(stringLen)
1837
+			if intStringLen < 0 {
1838
+				return ErrInvalidLengthGenerated
1839
+			}
1840
+			postIndex := iNdEx + intStringLen
1841
+			if postIndex > l {
1842
+				return io.ErrUnexpectedEOF
1843
+			}
1844
+			m.CodeChallengeMethod = string(data[iNdEx:postIndex])
1845
+			iNdEx = postIndex
1788 1846
 		default:
1789 1847
 			iNdEx = preIndex
1790 1848
 			skippy, err := skipGenerated(data[iNdEx:])
... ...
@@ -2800,69 +2872,72 @@ var (
2800 2800
 )
2801 2801
 
2802 2802
 var fileDescriptorGenerated = []byte{
2803
-	// 1024 bytes of a gzipped FileDescriptorProto
2804
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x56, 0xcf, 0x6f, 0x1b, 0x45,
2805
-	0x14, 0xee, 0xc6, 0x71, 0x62, 0x3f, 0xb7, 0xb1, 0x3d, 0x6d, 0xa8, 0x09, 0x90, 0x54, 0x06, 0x41,
2806
-	0x10, 0xe9, 0xae, 0x12, 0x51, 0xa9, 0x48, 0xa8, 0x92, 0x1d, 0x02, 0x58, 0x82, 0x56, 0x9a, 0x34,
2807
-	0x80, 0x90, 0x40, 0x9a, 0xec, 0x4e, 0xec, 0xc5, 0xeb, 0x5d, 0x6b, 0x67, 0x36, 0x14, 0xc4, 0x81,
2808
-	0x1b, 0x57, 0xfe, 0x09, 0x8e, 0xdc, 0xb8, 0x72, 0xcf, 0x31, 0x47, 0xc4, 0x21, 0x2a, 0xe5, 0xc6,
2809
-	0x9f, 0xc0, 0x05, 0xde, 0xce, 0xae, 0xf7, 0x97, 0xed, 0xa0, 0x44, 0x22, 0xe2, 0xc0, 0x61, 0xa4,
2810
-	0xdd, 0xf7, 0xbe, 0x6f, 0xe6, 0xbd, 0x37, 0xdf, 0xbc, 0x19, 0x78, 0xbb, 0x6f, 0xcb, 0x41, 0x70,
2811
-	0xa8, 0x9b, 0xde, 0xc8, 0xf0, 0xc6, 0xdc, 0x15, 0x03, 0xfb, 0x48, 0x1a, 0x9e, 0x6f, 0xf7, 0x6d,
2812
-	0xd7, 0x18, 0x0f, 0xfb, 0x86, 0xc7, 0x02, 0x39, 0x30, 0xd8, 0xd8, 0x36, 0x8e, 0xb7, 0x8d, 0x3e,
2813
-	0x77, 0xb9, 0xcf, 0x24, 0xb7, 0xf4, 0xb1, 0xef, 0x49, 0x8f, 0x6c, 0xa5, 0x6c, 0x3d, 0x61, 0xeb,
2814
-	0x11, 0x5b, 0x47, 0xb6, 0xae, 0xd8, 0x3a, 0xb2, 0xf5, 0xe3, 0xed, 0xb5, 0xbb, 0x99, 0xb5, 0xfa,
2815
-	0x5e, 0xdf, 0x33, 0xd4, 0x24, 0x87, 0xc1, 0x91, 0xfa, 0x53, 0x3f, 0xea, 0x2b, 0x9a, 0x7c, 0xed,
2816
-	0xde, 0xf0, 0xbe, 0xd0, 0x6d, 0xcf, 0x18, 0x06, 0x87, 0xdc, 0x77, 0xb9, 0xe4, 0x42, 0x05, 0x14,
2817
-	0x86, 0x12, 0xb8, 0xc7, 0xdc, 0x17, 0xb6, 0xe7, 0x72, 0xab, 0x18, 0xd3, 0xda, 0xd6, 0x7c, 0xda,
2818
-	0x74, 0x06, 0x6b, 0x77, 0x67, 0xa3, 0xfd, 0xc0, 0x95, 0xf6, 0x88, 0x4f, 0xc1, 0xb7, 0x67, 0xc3,
2819
-	0x03, 0x69, 0x3b, 0x86, 0xed, 0x4a, 0x21, 0xfd, 0x22, 0xa5, 0xfd, 0xb3, 0x06, 0x2f, 0xec, 0x3a,
2820
-	0x81, 0x90, 0xdc, 0xa7, 0x9e, 0xc3, 0xf7, 0x4d, 0x2c, 0x14, 0xe5, 0x88, 0xb4, 0x4d, 0x89, 0x19,
2821
-	0x90, 0x37, 0xa0, 0xea, 0xa3, 0xfd, 0x21, 0x1b, 0x71, 0xd1, 0xd2, 0xee, 0x94, 0x36, 0xab, 0xdd,
2822
-	0x1b, 0xcf, 0xce, 0x36, 0xaa, 0x74, 0x62, 0xa4, 0xa9, 0x9f, 0xe8, 0x00, 0x6e, 0xf8, 0x31, 0x66,
2823
-	0x26, 0xa2, 0x17, 0x14, 0x7a, 0x05, 0xd1, 0xf0, 0x30, 0xb1, 0xd2, 0x0c, 0x82, 0x74, 0xa0, 0xce,
2824
-	0x1c, 0xc7, 0xfb, 0x72, 0x4f, 0x98, 0xcc, 0x61, 0xe1, 0x7a, 0xad, 0xd2, 0x1d, 0x6d, 0xb3, 0xd2,
2825
-	0xbd, 0x7d, 0x72, 0xb6, 0x71, 0x0d, 0x89, 0xf5, 0x4e, 0xde, 0x4d, 0x8b, 0xf8, 0xf6, 0x5f, 0x25,
2826
-	0x68, 0x3c, 0xea, 0xe0, 0x36, 0x76, 0x4c, 0x9c, 0x51, 0x3c, 0xf6, 0x86, 0xdc, 0x25, 0x9f, 0x40,
2827
-	0x65, 0xc4, 0x25, 0xb3, 0x98, 0x64, 0x18, 0xb3, 0xb6, 0x59, 0xdb, 0xd9, 0xd4, 0xa3, 0xd2, 0xe8,
2828
-	0x69, 0x69, 0x94, 0x02, 0xa2, 0xbd, 0xd7, 0x1f, 0x1d, 0x7e, 0xc1, 0x4d, 0xf9, 0x21, 0x72, 0xba,
2829
-	0x24, 0x5e, 0x1a, 0x52, 0x1b, 0x4d, 0x66, 0x23, 0x3b, 0x00, 0xa6, 0x63, 0x73, 0x57, 0x86, 0x19,
2830
-	0x61, 0x86, 0x1a, 0x66, 0x98, 0x30, 0x76, 0x13, 0x0f, 0xcd, 0xa0, 0x88, 0x01, 0x55, 0xfe, 0x64,
2831
-	0x6c, 0xfb, 0x5c, 0xf4, 0xa2, 0xfc, 0x4a, 0xdd, 0x66, 0x4c, 0xa9, 0xee, 0x4d, 0x1c, 0x34, 0xc5,
2832
-	0x90, 0x36, 0x2c, 0x89, 0x70, 0x1f, 0x44, 0x6b, 0x51, 0x95, 0x10, 0x10, 0xb9, 0xa4, 0x76, 0x46,
2833
-	0xd0, 0xd8, 0x43, 0xee, 0x41, 0xcd, 0xe7, 0x16, 0x12, 0x4c, 0x79, 0x40, 0x7b, 0xad, 0xb2, 0x8a,
2834
-	0xe4, 0x66, 0x3c, 0x6d, 0x8d, 0xa6, 0x2e, 0x9a, 0xc5, 0x91, 0x2d, 0xa8, 0x04, 0x82, 0xfb, 0x2a,
2835
-	0xfa, 0x25, 0xc5, 0x69, 0xc4, 0x9c, 0xca, 0x41, 0x6c, 0xa7, 0x09, 0x82, 0xbc, 0x0e, 0xcb, 0xe1,
2836
-	0xf7, 0x41, 0xef, 0x9d, 0xd6, 0xb2, 0x02, 0xd7, 0x63, 0xf0, 0xf2, 0x41, 0x64, 0xa6, 0x13, 0x3f,
2837
-	0x79, 0x00, 0x2b, 0xe1, 0x61, 0xc2, 0xc3, 0xf5, 0x35, 0x57, 0x9b, 0xd0, 0xaa, 0x28, 0xc6, 0x73,
2838
-	0x31, 0x63, 0xa5, 0x93, 0xf3, 0xd2, 0x02, 0x9a, 0xdc, 0x87, 0xeb, 0x3e, 0x3f, 0xc2, 0xfc, 0x07,
2839
-	0x11, 0xbb, 0xaa, 0xd8, 0xb7, 0x62, 0xf6, 0x75, 0x9a, 0xf1, 0xd1, 0x1c, 0xb2, 0xfd, 0xab, 0x06,
2840
-	0xb7, 0x8a, 0x0a, 0xf8, 0xc0, 0x16, 0x92, 0x7c, 0x36, 0xa5, 0x02, 0xe3, 0x1c, 0x15, 0x64, 0x0e,
2841
-	0xad, 0x1e, 0xd2, 0x95, 0x18, 0x92, 0xe2, 0x4c, 0x2c, 0x19, 0x29, 0x98, 0x50, 0xb6, 0x25, 0x1f,
2842
-	0x45, 0x3a, 0xaf, 0xed, 0x3c, 0xd0, 0x2f, 0xd2, 0x6d, 0xf4, 0x62, 0xc4, 0xdd, 0x1b, 0xf1, 0x52,
2843
-	0xe5, 0x5e, 0x38, 0x29, 0x8d, 0xe6, 0x6e, 0xff, 0x58, 0x82, 0x9b, 0x11, 0x34, 0x5f, 0xae, 0xff,
2844
-	0x15, 0x3e, 0x4f, 0xe1, 0x2f, 0x43, 0x59, 0x48, 0x6c, 0x70, 0xb1, 0xbc, 0x93, 0xb2, 0xee, 0x87,
2845
-	0x46, 0x1a, 0xf9, 0x72, 0xc7, 0x60, 0xf9, 0x22, 0xc7, 0xa0, 0x72, 0xfe, 0x31, 0x68, 0x3f, 0xd5,
2846
-	0xe0, 0xf6, 0x8c, 0xfd, 0xba, 0x0a, 0x3d, 0x1e, 0xe5, 0xf5, 0xd8, 0xb9, 0x8c, 0x1e, 0x73, 0x41,
2847
-	0xcf, 0x91, 0xe4, 0x4f, 0x8b, 0x50, 0x53, 0xe8, 0x48, 0x0c, 0xff, 0xa2, 0x14, 0x5f, 0x45, 0x95,
2848
-	0x70, 0xd3, 0xe7, 0x32, 0x96, 0xe1, 0x4a, 0x8c, 0x5e, 0xda, 0x57, 0x56, 0x1a, 0x7b, 0xc9, 0x2e,
2849
-	0x34, 0x99, 0x65, 0xd9, 0xe1, 0x7d, 0xc0, 0x9c, 0xc8, 0x27, 0x50, 0x86, 0xa1, 0xb0, 0x56, 0x11,
2850
-	0xde, 0xec, 0x14, 0x9d, 0x74, 0x1a, 0x4f, 0xf6, 0x61, 0x15, 0xb5, 0x39, 0xf6, 0x5c, 0xeb, 0x63,
2851
-	0xac, 0xdb, 0xee, 0x00, 0x2f, 0x1a, 0xee, 0xf6, 0x95, 0x42, 0xc3, 0x1b, 0xe9, 0xa5, 0x78, 0xed,
2852
-	0x55, 0x3a, 0x0b, 0x44, 0x67, 0x73, 0xc9, 0x9b, 0x61, 0x57, 0x4b, 0xb4, 0x29, 0x50, 0xc4, 0x61,
2853
-	0x50, 0x8d, 0xa8, 0xa3, 0xa5, 0x76, 0x9a, 0x43, 0x91, 0x1e, 0xd4, 0xfa, 0x3e, 0x73, 0xc3, 0x72,
2854
-	0x0c, 0x3c, 0x2b, 0x16, 0xf2, 0x6b, 0x13, 0xe5, 0xbf, 0x97, 0xba, 0xfe, 0x3c, 0xdb, 0x68, 0xa8,
2855
-	0xdf, 0xf7, 0x99, 0x6b, 0x39, 0xdc, 0x7f, 0xfc, 0x15, 0x5e, 0xde, 0x59, 0x2e, 0xf9, 0x4e, 0x83,
2856
-	0xa6, 0x28, 0xdc, 0xe9, 0x02, 0x25, 0x7f, 0x89, 0x8e, 0x55, 0x7c, 0x1a, 0x74, 0x9f, 0x8f, 0x23,
2857
-	0x6a, 0x16, 0x3d, 0x58, 0xdf, 0xa9, 0x35, 0xdb, 0x3f, 0x2c, 0x40, 0x2b, 0x23, 0x9b, 0x89, 0xd4,
2858
-	0xd4, 0x2d, 0xfe, 0x1f, 0x6b, 0x67, 0xd9, 0xee, 0x50, 0xba, 0x48, 0x77, 0x58, 0xfc, 0x87, 0x4b,
2859
-	0x32, 0x6d, 0x7b, 0xe5, 0x79, 0x6d, 0xaf, 0xfd, 0x87, 0x06, 0x2f, 0xce, 0xab, 0xd3, 0x55, 0xb4,
2860
-	0x91, 0x61, 0xbe, 0x8d, 0xbc, 0x7b, 0x89, 0x36, 0x32, 0x23, 0xf2, 0x39, 0xbd, 0xe4, 0x54, 0x83,
2861
-	0x7a, 0x86, 0x72, 0x15, 0xf9, 0x7d, 0x9e, 0xcf, 0xef, 0xad, 0x4b, 0xe7, 0x37, 0x27, 0x25, 0x7c,
2862
-	0x50, 0x37, 0x66, 0xbc, 0xa2, 0x2b, 0x0e, 0xba, 0x7d, 0xe6, 0x4c, 0x1e, 0xd1, 0xf5, 0xf0, 0x28,
2863
-	0xef, 0x3d, 0x61, 0xa6, 0xfc, 0x88, 0x39, 0x01, 0xee, 0x7f, 0x02, 0x20, 0xdf, 0x40, 0xcd, 0x4c,
2864
-	0x5f, 0xe4, 0x4a, 0xb3, 0xb5, 0x9d, 0xde, 0xc5, 0xe2, 0x3c, 0xe7, 0x49, 0x1f, 0x2d, 0x9d, 0x01,
2865
-	0xd0, 0xec, 0x72, 0xdd, 0x57, 0x4e, 0x7e, 0x5b, 0xbf, 0x76, 0x8a, 0xe3, 0x17, 0x1c, 0xdf, 0x3e,
2866
-	0x5b, 0xd7, 0x4e, 0x70, 0x9c, 0xe2, 0x78, 0x8a, 0xe3, 0xfb, 0xdf, 0xd7, 0xaf, 0x7d, 0xba, 0x70,
2867
-	0xbc, 0xfd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0xe6, 0x4d, 0xde, 0x99, 0x0d, 0x00, 0x00,
2803
+	// 1067 bytes of a gzipped FileDescriptorProto
2804
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
2805
+	0x14, 0xcf, 0xe6, 0xaf, 0xfd, 0xdc, 0x24, 0xf6, 0xa4, 0xa1, 0x26, 0x85, 0xa4, 0x32, 0x08, 0x82,
2806
+	0x48, 0x77, 0x95, 0x88, 0x4a, 0x45, 0xa0, 0x4a, 0xb6, 0x09, 0x60, 0x89, 0xb6, 0xd2, 0xa4, 0x01,
2807
+	0x84, 0x04, 0xd2, 0x66, 0x77, 0x62, 0x2f, 0x5e, 0xef, 0x5a, 0x3b, 0xb3, 0xa1, 0x20, 0x0e, 0xdc,
2808
+	0xb8, 0xf2, 0x25, 0xf8, 0x06, 0x5c, 0x38, 0x70, 0xcf, 0x31, 0x47, 0xc4, 0x21, 0x2a, 0xe5, 0xc6,
2809
+	0x47, 0xe0, 0x02, 0x6f, 0x67, 0xc7, 0xfb, 0xcf, 0x76, 0xab, 0x44, 0x22, 0xe2, 0xc0, 0x61, 0xa5,
2810
+	0xdd, 0xf7, 0x7e, 0xbf, 0x99, 0xf7, 0xde, 0xbc, 0xdf, 0xf3, 0x18, 0xde, 0xed, 0x3a, 0xa2, 0x17,
2811
+	0x1e, 0xe9, 0x96, 0x3f, 0x30, 0xfc, 0x21, 0xf3, 0x78, 0xcf, 0x39, 0x16, 0x86, 0x1f, 0x38, 0x5d,
2812
+	0xc7, 0x33, 0x86, 0xfd, 0xae, 0xe1, 0x9b, 0xa1, 0xe8, 0x19, 0xe6, 0xd0, 0x31, 0x4e, 0x76, 0x8d,
2813
+	0x2e, 0xf3, 0x58, 0x60, 0x0a, 0x66, 0xeb, 0xc3, 0xc0, 0x17, 0x3e, 0xd9, 0x49, 0xd9, 0x7a, 0xc2,
2814
+	0xd6, 0x63, 0xb6, 0x8e, 0x6c, 0x5d, 0xb2, 0x75, 0x64, 0xeb, 0x27, 0xbb, 0x1b, 0xb7, 0x33, 0x7b,
2815
+	0x75, 0xfd, 0xae, 0x6f, 0xc8, 0x45, 0x8e, 0xc2, 0x63, 0xf9, 0x25, 0x3f, 0xe4, 0x5b, 0xbc, 0xf8,
2816
+	0xc6, 0x9d, 0xfe, 0x5d, 0xae, 0x3b, 0xbe, 0xd1, 0x0f, 0x8f, 0x58, 0xe0, 0x31, 0xc1, 0xb8, 0x0c,
2817
+	0x28, 0x0a, 0x25, 0xf4, 0x4e, 0x58, 0xc0, 0x1d, 0xdf, 0x63, 0x76, 0x31, 0xa6, 0x8d, 0x9d, 0xe9,
2818
+	0xb4, 0xf1, 0x0c, 0x36, 0x6e, 0x4f, 0x46, 0x07, 0xa1, 0x27, 0x9c, 0x01, 0x1b, 0x83, 0xef, 0x4e,
2819
+	0x86, 0x87, 0xc2, 0x71, 0x0d, 0xc7, 0x13, 0x5c, 0x04, 0x45, 0x4a, 0xe3, 0x17, 0x0d, 0x6e, 0xb6,
2820
+	0xdd, 0x90, 0x0b, 0x16, 0x50, 0xdf, 0x65, 0x07, 0x16, 0x16, 0x8a, 0x32, 0x44, 0x3a, 0x96, 0xc0,
2821
+	0x0c, 0xc8, 0x9b, 0x50, 0x0e, 0xd0, 0xfe, 0xc0, 0x1c, 0x30, 0x5e, 0xd7, 0x6e, 0xcd, 0x6d, 0x97,
2822
+	0x5b, 0xcb, 0x4f, 0xcf, 0xb7, 0xca, 0x74, 0x64, 0xa4, 0xa9, 0x9f, 0xe8, 0x00, 0x5e, 0xf4, 0x32,
2823
+	0x34, 0x2d, 0x44, 0xcf, 0x4a, 0xf4, 0x0a, 0xa2, 0xe1, 0x41, 0x62, 0xa5, 0x19, 0x04, 0x69, 0xc2,
2824
+	0xaa, 0xe9, 0xba, 0xfe, 0x57, 0xfb, 0xdc, 0x32, 0x5d, 0x33, 0xda, 0xaf, 0x3e, 0x77, 0x4b, 0xdb,
2825
+	0x2e, 0xb5, 0x6e, 0x9c, 0x9e, 0x6f, 0xcd, 0x20, 0x71, 0xb5, 0x99, 0x77, 0xd3, 0x22, 0xbe, 0xf1,
2826
+	0xf7, 0x1c, 0x54, 0x1f, 0x36, 0xf1, 0x18, 0x9b, 0x16, 0xae, 0xc8, 0x1f, 0xf9, 0x7d, 0xe6, 0x91,
2827
+	0x4f, 0xa1, 0x34, 0x60, 0xc2, 0xb4, 0x4d, 0x61, 0x62, 0xcc, 0xda, 0x76, 0x65, 0x6f, 0x5b, 0x8f,
2828
+	0x4b, 0xa3, 0xa7, 0xa5, 0x91, 0x1d, 0x10, 0x9f, 0xbd, 0xfe, 0xf0, 0xe8, 0x4b, 0x66, 0x89, 0xfb,
2829
+	0xc8, 0x69, 0x11, 0xb5, 0x35, 0xa4, 0x36, 0x9a, 0xac, 0x46, 0xf6, 0x00, 0x2c, 0xd7, 0x61, 0x9e,
2830
+	0x88, 0x32, 0xc2, 0x0c, 0x35, 0xcc, 0x30, 0x61, 0xb4, 0x13, 0x0f, 0xcd, 0xa0, 0x88, 0x01, 0x65,
2831
+	0xf6, 0x78, 0xe8, 0x04, 0x8c, 0x77, 0xe2, 0xfc, 0xe6, 0x5a, 0x35, 0x45, 0x29, 0xef, 0x8f, 0x1c,
2832
+	0x34, 0xc5, 0x90, 0x06, 0x2c, 0xf2, 0xe8, 0x1c, 0x78, 0x7d, 0x5e, 0x96, 0x10, 0x10, 0xb9, 0x28,
2833
+	0x4f, 0x86, 0x53, 0xe5, 0x21, 0x77, 0xa0, 0x12, 0x30, 0x1b, 0x09, 0x96, 0x38, 0xa4, 0x9d, 0xfa,
2834
+	0x82, 0x8c, 0x64, 0x4d, 0x2d, 0x5b, 0xa1, 0xa9, 0x8b, 0x66, 0x71, 0x64, 0x07, 0x4a, 0x21, 0x67,
2835
+	0x81, 0x8c, 0x7e, 0x51, 0x72, 0xaa, 0x8a, 0x53, 0x3a, 0x54, 0x76, 0x9a, 0x20, 0xc8, 0x1b, 0xb0,
2836
+	0x14, 0xbd, 0x1f, 0x76, 0xde, 0xab, 0x2f, 0x49, 0xf0, 0xaa, 0x02, 0x2f, 0x1d, 0xc6, 0x66, 0x3a,
2837
+	0xf2, 0x93, 0x7b, 0xb0, 0x12, 0x89, 0x09, 0xc5, 0xf5, 0x0d, 0x93, 0x87, 0x50, 0x2f, 0x49, 0xc6,
2838
+	0x0b, 0x8a, 0xb1, 0xd2, 0xcc, 0x79, 0x69, 0x01, 0x4d, 0xee, 0xc2, 0xb5, 0x80, 0x1d, 0x63, 0xfe,
2839
+	0xbd, 0x98, 0x5d, 0x96, 0xec, 0xeb, 0x8a, 0x7d, 0x8d, 0x66, 0x7c, 0x34, 0x87, 0x6c, 0xfc, 0xa6,
2840
+	0xc1, 0xf5, 0x62, 0x07, 0x7c, 0xe4, 0x70, 0x41, 0x3e, 0x1f, 0xeb, 0x02, 0xe3, 0x19, 0x5d, 0x90,
2841
+	0x11, 0xad, 0x1e, 0xd1, 0x65, 0x33, 0x24, 0xc5, 0x19, 0x59, 0x32, 0xad, 0x60, 0xc1, 0x82, 0x23,
2842
+	0xd8, 0x20, 0xee, 0xf3, 0xca, 0xde, 0x3d, 0xfd, 0x22, 0xd3, 0x46, 0x2f, 0x46, 0xdc, 0x5a, 0x56,
2843
+	0x5b, 0x2d, 0x74, 0xa2, 0x45, 0x69, 0xbc, 0x76, 0xe3, 0xe7, 0x79, 0x58, 0x8b, 0xa1, 0xf9, 0x72,
2844
+	0xfd, 0xdf, 0xe1, 0xd3, 0x3a, 0xfc, 0x15, 0x58, 0xe0, 0x02, 0x07, 0x9c, 0x6a, 0xef, 0xa4, 0xac,
2845
+	0x07, 0x91, 0x91, 0xc6, 0xbe, 0x9c, 0x0c, 0x96, 0x2e, 0x22, 0x83, 0xd2, 0x73, 0x64, 0xf0, 0x0e,
2846
+	0x2c, 0x5b, 0xbe, 0xcd, 0xda, 0x3d, 0x9c, 0x53, 0xcc, 0xeb, 0x32, 0xd5, 0xc7, 0xeb, 0x8a, 0xb0,
2847
+	0xdc, 0xce, 0x3a, 0x69, 0x1e, 0x4b, 0xee, 0xc3, 0x5a, 0xce, 0x80, 0x27, 0xd3, 0xf3, 0xed, 0x3a,
2848
+	0xc8, 0x25, 0x6e, 0xaa, 0x25, 0xd6, 0xda, 0xe3, 0x10, 0x3a, 0x89, 0xd7, 0x78, 0xa2, 0xc1, 0x8d,
2849
+	0x09, 0xbd, 0x73, 0x15, 0xda, 0x38, 0xce, 0x6b, 0xa3, 0x79, 0x19, 0x6d, 0xe4, 0x82, 0x9e, 0x22,
2850
+	0x8f, 0x9f, 0xe6, 0xa1, 0x22, 0xd1, 0x71, 0x63, 0xfe, 0x8b, 0xb2, 0x78, 0x0d, 0x3b, 0x96, 0x59,
2851
+	0x01, 0x13, 0x4a, 0x12, 0x2b, 0x0a, 0xbd, 0x78, 0x20, 0xad, 0x54, 0x79, 0x49, 0x1b, 0x6a, 0xa6,
2852
+	0x6d, 0x3b, 0xd1, 0x6f, 0x93, 0xe9, 0xc6, 0x3e, 0x8e, 0x92, 0x88, 0x9a, 0x7c, 0x1d, 0xe1, 0xb5,
2853
+	0x66, 0xd1, 0x49, 0xc7, 0xf1, 0xe4, 0x00, 0xd6, 0x51, 0x27, 0x43, 0xdf, 0xb3, 0x3f, 0xc1, 0xba,
2854
+	0x25, 0xe7, 0x1a, 0xa9, 0x25, 0xfa, 0x75, 0x7c, 0x59, 0xed, 0xbd, 0x4e, 0x27, 0x81, 0xe8, 0x64,
2855
+	0x2e, 0x79, 0x2b, 0x9a, 0xb0, 0x89, 0x4e, 0x38, 0x0a, 0x2a, 0x0a, 0xaa, 0x1a, 0x4f, 0xd7, 0xd4,
2856
+	0x4e, 0x73, 0x28, 0xd2, 0x81, 0x4a, 0x37, 0x30, 0x3d, 0xa1, 0x7a, 0x31, 0x16, 0xd5, 0xeb, 0x23,
2857
+	0x15, 0x7e, 0x90, 0xba, 0xfe, 0x3a, 0xdf, 0xaa, 0xca, 0xcf, 0x0f, 0x4d, 0xcf, 0x76, 0x59, 0xf0,
2858
+	0xe8, 0x6b, 0xbc, 0x48, 0x64, 0xb9, 0xe4, 0x7b, 0x0d, 0x6a, 0xbc, 0x70, 0xbf, 0xe0, 0x28, 0xbf,
2859
+	0x4b, 0x4c, 0xcf, 0xe2, 0x35, 0xa5, 0xf5, 0xa2, 0x8a, 0xa8, 0x56, 0xf4, 0x60, 0x7d, 0xc7, 0xf6,
2860
+	0x6c, 0xfc, 0x38, 0x0b, 0xf5, 0x4c, 0xdb, 0x8c, 0x5a, 0x4d, 0xde, 0x28, 0xfe, 0x63, 0xa3, 0x35,
2861
+	0x3b, 0xa9, 0xe6, 0x2e, 0x32, 0xa9, 0xe6, 0x9f, 0x33, 0xa9, 0xd2, 0x11, 0xbc, 0x30, 0x6d, 0x04,
2862
+	0x37, 0xfe, 0xd4, 0xe0, 0xa5, 0x69, 0x75, 0xba, 0x8a, 0x31, 0xd2, 0xcf, 0x8f, 0x91, 0xf7, 0x2f,
2863
+	0x31, 0x46, 0x26, 0x44, 0x3e, 0x65, 0x96, 0x9c, 0x69, 0xb0, 0x9a, 0xa1, 0x5c, 0x45, 0x7e, 0x5f,
2864
+	0xe4, 0xf3, 0x7b, 0xfb, 0xd2, 0xf9, 0x4d, 0x49, 0x09, 0x2f, 0xf7, 0xd5, 0x09, 0x37, 0xfa, 0x92,
2865
+	0x8b, 0xee, 0xc0, 0x74, 0x47, 0x17, 0xfa, 0xd5, 0x48, 0xca, 0xfb, 0x8f, 0x4d, 0x4b, 0x7c, 0x6c,
2866
+	0xba, 0x21, 0x9e, 0x7f, 0x02, 0x20, 0xdf, 0x42, 0xc5, 0x4a, 0xff, 0x1d, 0xc8, 0x9e, 0xad, 0xec,
2867
+	0x75, 0x2e, 0x16, 0xe7, 0x33, 0xfe, 0x5e, 0xc4, 0x5b, 0x67, 0x00, 0x34, 0xbb, 0x5d, 0xeb, 0xd5,
2868
+	0xd3, 0xdf, 0x37, 0x67, 0xce, 0xf0, 0xf9, 0x15, 0x9f, 0xef, 0x9e, 0x6e, 0x6a, 0xa7, 0xf8, 0x9c,
2869
+	0xe1, 0xf3, 0x04, 0x9f, 0x1f, 0xfe, 0xd8, 0x9c, 0xf9, 0x6c, 0xf6, 0x64, 0xf7, 0x9f, 0x00, 0x00,
2870
+	0x00, 0xff, 0xff, 0xf7, 0xe5, 0x0b, 0x39, 0x25, 0x0e, 0x00, 0x00,
2868 2871
 }
... ...
@@ -90,6 +90,12 @@ message OAuthAuthorizeToken {
90 90
   // UserUID is the unique UID associated with this token. UserUID and UserName must both match
91 91
   // for this token to be valid.
92 92
   optional string userUID = 8;
93
+
94
+  // CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636
95
+  optional string codeChallenge = 9;
96
+
97
+  // CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636
98
+  optional string codeChallengeMethod = 10;
93 99
 }
94 100
 
95 101
 // OAuthAuthorizeTokenList is a collection of OAuth authorization tokens
... ...
@@ -11,7 +11,7 @@ const GroupName = ""
11 11
 var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"}
12 12
 
13 13
 var (
14
-	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs)
14
+	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs)
15 15
 	AddToScheme   = SchemeBuilder.AddToScheme
16 16
 )
17 17
 
... ...
@@ -44,15 +44,17 @@ func (OAuthAccessTokenList) SwaggerDoc() map[string]string {
44 44
 }
45 45
 
46 46
 var map_OAuthAuthorizeToken = map[string]string{
47
-	"":            "OAuthAuthorizeToken describes an OAuth authorization token",
48
-	"metadata":    "Standard object's metadata.",
49
-	"clientName":  "ClientName references the client that created this token.",
50
-	"expiresIn":   "ExpiresIn is the seconds from CreationTime before this token expires.",
51
-	"scopes":      "Scopes is an array of the requested scopes.",
52
-	"redirectURI": "RedirectURI is the redirection associated with the token.",
53
-	"state":       "State data from request",
54
-	"userName":    "UserName is the user name associated with this token",
55
-	"userUID":     "UserUID is the unique UID associated with this token. UserUID and UserName must both match for this token to be valid.",
47
+	"":                    "OAuthAuthorizeToken describes an OAuth authorization token",
48
+	"metadata":            "Standard object's metadata.",
49
+	"clientName":          "ClientName references the client that created this token.",
50
+	"expiresIn":           "ExpiresIn is the seconds from CreationTime before this token expires.",
51
+	"scopes":              "Scopes is an array of the requested scopes.",
52
+	"redirectURI":         "RedirectURI is the redirection associated with the token.",
53
+	"state":               "State data from request",
54
+	"userName":            "UserName is the user name associated with this token",
55
+	"userUID":             "UserUID is the unique UID associated with this token. UserUID and UserName must both match for this token to be valid.",
56
+	"codeChallenge":       "CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636",
57
+	"codeChallengeMethod": "CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636",
56 58
 }
57 59
 
58 60
 func (OAuthAuthorizeToken) SwaggerDoc() map[string]string {
... ...
@@ -63,6 +63,12 @@ type OAuthAuthorizeToken struct {
63 63
 	// UserUID is the unique UID associated with this token. UserUID and UserName must both match
64 64
 	// for this token to be valid.
65 65
 	UserUID string `json:"userUID,omitempty" protobuf:"bytes,8,opt,name=userUID"`
66
+
67
+	// CodeChallenge is the optional code_challenge associated with this authorization code, as described in rfc7636
68
+	CodeChallenge string `json:"codeChallenge,omitempty" protobuf:"bytes,9,opt,name=codeChallenge"`
69
+
70
+	// CodeChallengeMethod is the optional code_challenge_method associated with this authorization code, as described in rfc7636
71
+	CodeChallengeMethod string `json:"codeChallengeMethod,omitempty" protobuf:"bytes,10,opt,name=codeChallengeMethod"`
66 72
 }
67 73
 
68 74
 // +genclient=true
... ...
@@ -160,6 +160,7 @@ func Convert_api_OAuthAccessTokenList_To_v1_OAuthAccessTokenList(in *api.OAuthAc
160 160
 }
161 161
 
162 162
 func autoConvert_v1_OAuthAuthorizeToken_To_api_OAuthAuthorizeToken(in *OAuthAuthorizeToken, out *api.OAuthAuthorizeToken, s conversion.Scope) error {
163
+	SetDefaults_OAuthAuthorizeToken(in)
163 164
 	if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil {
164 165
 		return err
165 166
 	}
... ...
@@ -173,6 +174,8 @@ func autoConvert_v1_OAuthAuthorizeToken_To_api_OAuthAuthorizeToken(in *OAuthAuth
173 173
 	out.State = in.State
174 174
 	out.UserName = in.UserName
175 175
 	out.UserUID = in.UserUID
176
+	out.CodeChallenge = in.CodeChallenge
177
+	out.CodeChallengeMethod = in.CodeChallengeMethod
176 178
 	return nil
177 179
 }
178 180
 
... ...
@@ -194,6 +197,8 @@ func autoConvert_api_OAuthAuthorizeToken_To_v1_OAuthAuthorizeToken(in *api.OAuth
194 194
 	out.State = in.State
195 195
 	out.UserName = in.UserName
196 196
 	out.UserUID = in.UserUID
197
+	out.CodeChallenge = in.CodeChallenge
198
+	out.CodeChallengeMethod = in.CodeChallengeMethod
197 199
 	return nil
198 200
 }
199 201
 
... ...
@@ -123,6 +123,8 @@ func DeepCopy_v1_OAuthAuthorizeToken(in interface{}, out interface{}, c *convers
123 123
 		out.State = in.State
124 124
 		out.UserName = in.UserName
125 125
 		out.UserUID = in.UserUID
126
+		out.CodeChallenge = in.CodeChallenge
127
+		out.CodeChallengeMethod = in.CodeChallengeMethod
126 128
 		return nil
127 129
 	}
128 130
 }
... ...
@@ -3,6 +3,7 @@ package validation
3 3
 import (
4 4
 	"fmt"
5 5
 	"net/url"
6
+	"regexp"
6 7
 	"strings"
7 8
 
8 9
 	"k8s.io/kubernetes/pkg/api/validation"
... ...
@@ -74,6 +75,8 @@ func ValidateAccessTokenUpdate(newToken, oldToken *api.OAuthAccessToken) field.E
74 74
 	return append(allErrs, validation.ValidateImmutableField(newToken, &copied, field.NewPath(""))...)
75 75
 }
76 76
 
77
+var codeChallengeRegex = regexp.MustCompile("^[a-zA-Z0-9._~-]{43,128}$")
78
+
77 79
 func ValidateAuthorizeToken(authorizeToken *api.OAuthAuthorizeToken) field.ErrorList {
78 80
 	allErrs := validation.ValidateObjectMeta(&authorizeToken.ObjectMeta, false, ValidateTokenName, field.NewPath("metadata"))
79 81
 	allErrs = append(allErrs, ValidateClientNameField(authorizeToken.ClientName, field.NewPath("clientName"))...)
... ...
@@ -87,6 +90,24 @@ func ValidateAuthorizeToken(authorizeToken *api.OAuthAuthorizeToken) field.Error
87 87
 		allErrs = append(allErrs, field.Invalid(field.NewPath("redirectURI"), authorizeToken.RedirectURI, msg))
88 88
 	}
89 89
 
90
+	if len(authorizeToken.CodeChallenge) > 0 || len(authorizeToken.CodeChallengeMethod) > 0 {
91
+		switch {
92
+		case len(authorizeToken.CodeChallenge) == 0:
93
+			allErrs = append(allErrs, field.Required(field.NewPath("codeChallenge"), "required if codeChallengeMethod is specified"))
94
+		case !codeChallengeRegex.MatchString(authorizeToken.CodeChallenge):
95
+			allErrs = append(allErrs, field.Invalid(field.NewPath("codeChallenge"), authorizeToken.CodeChallenge, "must be 43-128 characters [a-zA-Z0-9.~_-]"))
96
+		}
97
+
98
+		switch authorizeToken.CodeChallengeMethod {
99
+		case "":
100
+			allErrs = append(allErrs, field.Required(field.NewPath("codeChallengeMethod"), "required if codeChallenge is specified"))
101
+		case "plain", "S256":
102
+			// no-op, good
103
+		default:
104
+			allErrs = append(allErrs, field.NotSupported(field.NewPath("codeChallengeMethod"), authorizeToken.CodeChallengeMethod, []string{"plain", "S256"}))
105
+		}
106
+	}
107
+
90 108
 	return allErrs
91 109
 }
92 110
 
... ...
@@ -123,6 +123,8 @@ func DeepCopy_api_OAuthAuthorizeToken(in interface{}, out interface{}, c *conver
123 123
 		out.State = in.State
124 124
 		out.UserName = in.UserName
125 125
 		out.UserUID = in.UserUID
126
+		out.CodeChallenge = in.CodeChallenge
127
+		out.CodeChallengeMethod = in.CodeChallengeMethod
126 128
 		return nil
127 129
 	}
128 130
 }
... ...
@@ -185,11 +185,13 @@ func (s *storage) convertToAuthorizeToken(data *osin.AuthorizeData) (*api.OAuthA
185 185
 			Name:              data.Code,
186 186
 			CreationTimestamp: unversioned.Time{Time: data.CreatedAt},
187 187
 		},
188
-		ClientName:  data.Client.GetId(),
189
-		ExpiresIn:   int64(data.ExpiresIn),
190
-		Scopes:      scope.Split(data.Scope),
191
-		RedirectURI: data.RedirectUri,
192
-		State:       data.State,
188
+		CodeChallenge:       data.CodeChallenge,
189
+		CodeChallengeMethod: data.CodeChallengeMethod,
190
+		ClientName:          data.Client.GetId(),
191
+		ExpiresIn:           int64(data.ExpiresIn),
192
+		Scopes:              scope.Split(data.Scope),
193
+		RedirectURI:         data.RedirectUri,
194
+		State:               data.State,
193 195
 	}
194 196
 	if err := s.user.ConvertToAuthorizeToken(data.UserData, token); err != nil {
195 197
 		return nil, err
... ...
@@ -211,14 +213,16 @@ func (s *storage) convertFromAuthorizeToken(authorize *api.OAuthAuthorizeToken)
211 211
 	}
212 212
 
213 213
 	return &osin.AuthorizeData{
214
-		Code:        authorize.Name,
215
-		Client:      &clientWrapper{authorize.ClientName, client},
216
-		ExpiresIn:   int32(authorize.ExpiresIn),
217
-		Scope:       scope.Join(authorize.Scopes),
218
-		RedirectUri: authorize.RedirectURI,
219
-		State:       authorize.State,
220
-		CreatedAt:   authorize.CreationTimestamp.Time,
221
-		UserData:    user,
214
+		Code:                authorize.Name,
215
+		CodeChallenge:       authorize.CodeChallenge,
216
+		CodeChallengeMethod: authorize.CodeChallengeMethod,
217
+		Client:              &clientWrapper{authorize.ClientName, client},
218
+		ExpiresIn:           int32(authorize.ExpiresIn),
219
+		Scope:               scope.Join(authorize.Scopes),
220
+		RedirectUri:         authorize.RedirectURI,
221
+		State:               authorize.State,
222
+		CreatedAt:           authorize.CreationTimestamp.Time,
223
+		UserData:            user,
222 224
 	}, nil
223 225
 }
224 226