fix: decode bearer tokens for IM HTTP
This commit is contained in:
+5
-1
@@ -4848,7 +4848,11 @@ func resolveIMHTTPBearer(req *http.Request) (*imPrincipal, error) {
|
|||||||
if handler == nil || !handler.IsInitialized() {
|
if handler == nil || !handler.IsInitialized() {
|
||||||
return nil, types.ErrUnsupported
|
return nil, types.ErrUnsupported
|
||||||
}
|
}
|
||||||
rec, _, err := handler.Authenticate(auth.AuthContext{}, []byte(strings.TrimSpace(token)))
|
secret := []byte(strings.TrimSpace(token))
|
||||||
|
if decoded, err := base64.StdEncoding.DecodeString(strings.TrimSpace(token)); err == nil {
|
||||||
|
secret = decoded
|
||||||
|
}
|
||||||
|
rec, _, err := handler.Authenticate(auth.AuthContext{}, secret)
|
||||||
if err != nil || rec == nil || rec.TenantID.IsZero() || rec.Uid.IsZero() {
|
if err != nil || rec == nil || rec.TenantID.IsZero() || rec.Uid.IsZero() {
|
||||||
return nil, types.ErrPermissionDenied
|
return nil, types.ErrPermissionDenied
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -940,6 +940,23 @@ func expectIMBearer(t *testing.T, ctrl *gomock.Controller, token string, tenantI
|
|||||||
return mockStore
|
return mockStore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestResolveIMHTTPBearerAcceptsBase64Token(t *testing.T) {
|
||||||
|
ctrl := gomock.NewController(t)
|
||||||
|
defer ctrl.Finish()
|
||||||
|
expectIMBearer(t, ctrl, "token-1", 7, 42)
|
||||||
|
|
||||||
|
req := httptest.NewRequest(http.MethodGet, "/v1/im/bootstrap", nil)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+base64.StdEncoding.EncodeToString([]byte("token-1")))
|
||||||
|
|
||||||
|
principal, err := resolveIMHTTPBearer(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("resolve bearer: %v", err)
|
||||||
|
}
|
||||||
|
if principal.TenantID != 7 || principal.Uid != 42 {
|
||||||
|
t.Fatalf("principal mismatch: %#v", principal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestIMHTTPProtocolHeaders(t *testing.T) {
|
func TestIMHTTPProtocolHeaders(t *testing.T) {
|
||||||
apiKey := makeTestAPIKey(t)
|
apiKey := makeTestAPIKey(t)
|
||||||
called := 0
|
called := 0
|
||||||
|
|||||||
Reference in New Issue
Block a user