Просмотр исходного кода

auth: disable CommonName auth for gRPC-gateway

Signed-off-by: Sam Batschelet <sbatsche@redhat.com>
Sam Batschelet 7 лет назад
Родитель
Сommit
a2b420c364
1 измененных файлов с 14 добавлено и 1 удалено
  1. 14 1
      auth/store.go

+ 14 - 1
auth/store.go

@@ -981,10 +981,23 @@ func (as *authStore) AuthInfoFromTLS(ctx context.Context) *AuthInfo {
 			cn := chain.Subject.CommonName
 			cn := chain.Subject.CommonName
 			plog.Debugf("found common name %s", cn)
 			plog.Debugf("found common name %s", cn)
 
 
-			return &AuthInfo{
+			ai := &AuthInfo{
 				Username: cn,
 				Username: cn,
 				Revision: as.Revision(),
 				Revision: as.Revision(),
 			}
 			}
+			md, ok := metadata.FromIncomingContext(ctx)
+			if !ok {
+				return nil
+			}
+
+			// gRPC-gateway proxy request to etcd server includes Grpcgateway-Accept
+			// header. The proxy uses etcd client server certificate. If the certificate
+			// has a CommonName we should never use this for authentication.
+			if gw := md["grpcgateway-accept"]; len(gw) > 0 {
+				plog.Warningf("ignoring common name in gRPC-gateway proxy request %s", ai.Username)
+				return nil
+			}
+			return ai
 		}
 		}
 	}
 	}