diff --git a/models/user/search.go b/models/user/search.go
index 622e47ccffc50..bf35fcd9eb664 100644
--- a/models/user/search.go
+++ b/models/user/search.go
@@ -22,6 +22,8 @@ type SearchUserOptions struct {
 	Keyword       string
 	Type          UserType
 	UID           int64
+	LoginName     string // this option should be used only for admin user
+	SourceID      int64  // this option should be used only for admin user
 	OrderBy       db.SearchOrderBy
 	Visible       []structs.VisibleType
 	Actor         *User // The user doing the search
@@ -62,6 +64,13 @@ func (opts *SearchUserOptions) toSearchQueryBase() *xorm.Session {
 		cond = cond.And(builder.Eq{"id": opts.UID})
 	}
 
+	if opts.SourceID > 0 {
+		cond = cond.And(builder.Eq{"login_source": opts.SourceID})
+	}
+	if opts.LoginName != "" {
+		cond = cond.And(builder.Eq{"login_name": opts.LoginName})
+	}
+
 	if !opts.IsActive.IsNone() {
 		cond = cond.And(builder.Eq{"is_active": opts.IsActive.IsTrue()})
 	}
diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go
index 369d13943a329..8649a982b08ee 100644
--- a/routers/api/v1/admin/user.go
+++ b/routers/api/v1/admin/user.go
@@ -417,14 +417,23 @@ func DeleteUserPublicKey(ctx *context.APIContext) {
 	ctx.Status(http.StatusNoContent)
 }
 
-// GetAllUsers API for getting information of all the users
-func GetAllUsers(ctx *context.APIContext) {
-	// swagger:operation GET /admin/users admin adminGetAllUsers
+// SearchUsers API for getting information of the users according the filter conditions
+func SearchUsers(ctx *context.APIContext) {
+	// swagger:operation GET /admin/users admin adminSearchUsers
 	// ---
-	// summary: List all users
+	// summary: Search users according filter conditions
 	// produces:
 	// - application/json
 	// parameters:
+	// - name: source_id
+	//   in: query
+	//   description: ID of the user's login source to search for
+	//   type: integer
+	//   format: int64
+	// - name: login_name
+	//   in: query
+	//   description: user's login name to search for
+	//   type: string
 	// - name: page
 	//   in: query
 	//   description: page number of results to return (1-based)
@@ -444,11 +453,13 @@ func GetAllUsers(ctx *context.APIContext) {
 	users, maxResults, err := user_model.SearchUsers(&user_model.SearchUserOptions{
 		Actor:       ctx.Doer,
 		Type:        user_model.UserTypeIndividual,
+		LoginName:   ctx.FormTrim("login_name"),
+		SourceID:    ctx.FormInt64("source_id"),
 		OrderBy:     db.SearchOrderByAlphabetically,
 		ListOptions: listOptions,
 	})
 	if err != nil {
-		ctx.Error(http.StatusInternalServerError, "GetAllUsers", err)
+		ctx.Error(http.StatusInternalServerError, "SearchUsers", err)
 		return
 	}
 
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 5c32164fa7066..c3a875e737b6b 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -1245,7 +1245,7 @@ func Routes(ctx gocontext.Context) *web.Route {
 			})
 			m.Get("/orgs", admin.GetAllOrgs)
 			m.Group("/users", func() {
-				m.Get("", admin.GetAllUsers)
+				m.Get("", admin.SearchUsers)
 				m.Post("", bind(api.CreateUserOption{}), admin.CreateUser)
 				m.Group("/{username}", func() {
 					m.Combo("").Patch(bind(api.EditUserOption{}), admin.EditUser).
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 9c89b21fcac41..9e35724315c82 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -488,9 +488,22 @@
         "tags": [
           "admin"
         ],
-        "summary": "List all users",
-        "operationId": "adminGetAllUsers",
+        "summary": "Search users according filter conditions",
+        "operationId": "adminSearchUsers",
         "parameters": [
+          {
+            "type": "integer",
+            "format": "int64",
+            "description": "ID of the user's login source to search for",
+            "name": "source_id",
+            "in": "query"
+          },
+          {
+            "type": "string",
+            "description": "user's login name to search for",
+            "name": "login_name",
+            "in": "query"
+          },
           {
             "type": "integer",
             "description": "page number of results to return (1-based)",