diff --git a/CHANGELOG b/CHANGELOG
index a6c2f9ac0cb7badad226be8a51c4daa2565fba2c..a0fb7ead8006a1dd31e8cec939471b27e13e11c9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -7,7 +7,7 @@ v 7.13.0 (unreleased)
   - Rename "Design" profile settings page to "Preferences".
   - Allow users to customize their default Dashboard page.
   - Update ssl_ciphers in Nginx example to remove DHE settings. This will deny forward secrecy for Android 2.3.7, Java 6 and OpenSSL 0.9.8
-  - Admin can remove user identities
+  - Admin can edit and remove user identities
 
 v 7.12.0 (unreleased)
   - Fix post-receive errors on a push when an external issue tracker is configured (Stan Hu)
diff --git a/app/controllers/admin/identities_controller.rb b/app/controllers/admin/identities_controller.rb
index 6107b1bcb40400877caea0d19cbd2c387e36de07..795fecd78d6da2f41b8cae6b182403690972dfac 100644
--- a/app/controllers/admin/identities_controller.rb
+++ b/app/controllers/admin/identities_controller.rb
@@ -1,11 +1,21 @@
 class Admin::IdentitiesController < Admin::ApplicationController
-  before_action :user, only: [:destroy]
+  before_action :user
+  before_action :identity
 
-  def destroy
-    identity = user.identities.find(params[:id])
+  def edit
+  end
+
+  def update
+    if @identity.update_attributes(identity_params)
+      redirect_to admin_user_path(@user), notice: 'User identity was successfully updated.'
+    else
+      render :edit
+    end
+  end
 
+  def destroy
     respond_to do |format|
-      if identity.destroy
+      if @identity.destroy
         format.html { redirect_to [:admin, user], notice: 'User identity was successfully removed.' }
       else
         format.html { redirect_to [:admin, user], alert: 'Failed to remove user identity.' }
@@ -18,4 +28,12 @@ class Admin::IdentitiesController < Admin::ApplicationController
   def user
     @user ||= User.find_by!(username: params[:user_id])
   end
+
+  def identity
+    @identity ||= user.identities.find(params[:id])
+  end
+
+  def identity_params
+    params[:identity].permit(:provider, :extern_uid)
+  end
 end
diff --git a/app/views/admin/identities/_form.html.haml b/app/views/admin/identities/_form.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..1c34706a1245de0a664a579e69f851c9be9f7670
--- /dev/null
+++ b/app/views/admin/identities/_form.html.haml
@@ -0,0 +1,19 @@
+= form_for [:admin, @user, @identity], html: { class: 'form-horizontal fieldset-form' } do |f|
+  -if @identity.errors.any?
+    #error_explanation
+      .alert.alert-danger
+        - @identity.errors.full_messages.each do |msg|
+          %p= msg
+
+  .form-group
+    = f.label :provider, class: 'control-label'
+    .col-sm-10
+      = f.text_field :provider, required: true, autocomplete: "off", class: 'form-control', required: true
+  .form-group
+    = f.label :extern_uid, class: 'control-label'
+    .col-sm-10
+      = f.text_field :extern_uid, required: true, autocomplete: "off", class: 'form-control', required: true
+
+  .form-actions
+    = f.submit 'Save changes', class: "btn btn-save"
+
diff --git a/app/views/admin/identities/_identity.html.haml b/app/views/admin/identities/_identity.html.haml
index b94edefaa410d6900ce87a4d789e64b551f05a09..0b7020b887d1f9ea3f652add6eeafd479870058f 100644
--- a/app/views/admin/identities/_identity.html.haml
+++ b/app/views/admin/identities/_identity.html.haml
@@ -4,6 +4,9 @@
   %td
     = identity.extern_uid
   %td
+    = link_to edit_admin_user_identity_path(@user, identity), class: 'btn btn-xs btn-grouped' do
+      %i.fa.fa-edit
+      Edit
     = link_to [:admin, @user, identity], method: :delete,
       class: 'btn btn-xs btn-danger',
       data: { confirm: "Are you sure you want to remove this identity" } do
diff --git a/app/views/admin/identities/edit.html.haml b/app/views/admin/identities/edit.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..d49d79ce5c9bf91f9a0465341f9df72f5886488f
--- /dev/null
+++ b/app/views/admin/identities/edit.html.haml
@@ -0,0 +1,6 @@
+- page_title @user.name, "Users"
+%h3.page-title
+  Edit identity for #{@user.name}
+%hr
+
+= render 'form'
diff --git a/config/routes.rb b/config/routes.rb
index e9ff607aafec9e2973d87d1f686a4797cbe63184..8428eff1ef5ecca418ad70fef4e9db460d6e3170 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -149,7 +149,7 @@ Gitlab::Application.routes.draw do
   namespace :admin do
     resources :users, constraints: { id: /[a-zA-Z.\/0-9_\-]+/ } do
       resources :keys, only: [:show, :destroy]
-      resources :identities, only: [:destroy]
+      resources :identities, only: [:edit, :update, :destroy]
 
       member do
         put :team_update