##// END OF EJS Templates
docs: updated saml bulk instructions
marcink -
r3523:f31c3a2f default
parent child Browse files
Show More
@@ -1,88 +1,88 b''
1 1 .. _auth-saml-bulk-enroll-users-ref:
2 2
3 3
4 4 Bulk enroll multiple existing users
5 5 -----------------------------------
6 6
7 7
8 8 RhodeCode Supports standard SAML 2.0 SSO for the web-application part.
9 9 Below is an example how to enroll list of all or some users to use SAML authentication.
10 10 This method simply enables SAML authentication for many users at once.
11 11
12 12
13 13 From the server RhodeCode Enterprise is running run ishell on the instance which we
14 14 want to apply the SAML migration::
15 15
16 16 rccontrol ishell enterprise-1
17 17
18 18 Follow these steps to enable SAML authentication for multiple users.
19 19
20 20
21 21 1) Create a user_id => attribute mapping
22 22
23 23
24 24 `saml2user` is a mapping of external ID from SAML provider such as OneLogin, DuoSecurity, Google.
25 25 This mapping consists of local rhodecode user_id mapped to set of required attributes needed to bind SAML
26 26 account to internal rhodecode user.
27 27 For example, 123 is local rhodecode user_id, and '48253211' is OneLogin ID.
28 28 For other providers you'd have to figure out what would be the user-id, sometimes it's the email, i.e for Google
29 29 The most important this id needs to be unique for each user.
30 30
31 31 .. code-block:: python
32 32
33 33 In [1]: saml2user = {
34 34 ...: # OneLogin, uses externalID available to read from in the UI
35 ...: 123: {'id: '48253211'},
35 ...: 123: {'id': '48253211'},
36 36 ...: # for Google/DuoSecurity email is also an option for unique ID
37 ...: 124: {'id: 'email@domain.com'},
37 ...: 124: {'id': 'email@domain.com'},
38 38 ...: }
39 39
40 40
41 41 2) Import the plugin you want to run migration for.
42 42
43 43 From available options pick only one and run the `import` statement
44 44
45 45 .. code-block:: python
46 46
47 47 # for Duo Security
48 48 In [2]: from rc_auth_plugins.auth_duo_security import RhodeCodeAuthPlugin
49 49 # for OneLogin
50 50 In [2]: from rc_auth_plugins.auth_onelogin import RhodeCodeAuthPlugin
51 51 # generic SAML plugin
52 52 In [2]: from rc_auth_plugins.auth_saml import RhodeCodeAuthPlugin
53 53
54 54 3) Run the migration based on saml2user mapping.
55 55
56 56 Enter in the ishell prompt
57 57
58 58 .. code-block:: python
59 59
60 60 In [3]: for user in User.get_all():
61 61 ...: existing_identity = ExternalIdentity().query().filter(ExternalIdentity.local_user_id == user.user_id).scalar()
62 62 ...: attrs = saml2user.get(user.user_id)
63 63 ...: provider = RhodeCodeAuthPlugin.uid
64 64 ...: if existing_identity:
65 65 ...: print('Identity for user `{}` already exists, skipping'.format(user.username))
66 66 ...: continue
67 67 ...: if attrs:
68 68 ...: external_id = attrs['id']
69 69 ...: new_external_identity = ExternalIdentity()
70 70 ...: new_external_identity.external_id = external_id
71 71 ...: new_external_identity.external_username = '{}-saml-{}'.format(user.username, user.user_id)
72 72 ...: new_external_identity.provider_name = provider
73 ...: new_external_identity.local_user_id = user_id
73 ...: new_external_identity.local_user_id = user.user_id
74 74 ...: new_external_identity.access_token = ''
75 75 ...: new_external_identity.token_secret = ''
76 76 ...: new_external_identity.alt_token = ''
77 77 ...: Session().add(ex_identity)
78 78 ...: Session().commit()
79 79 ...: print('Set user `{}` external identity bound to ExternalID:{}'.format(user.username, external_id))
80 80
81 81 .. note::
82 82
83 83 saml2user can be really big and hard to maintain in ishell. It's also possible
84 84 to load it as a JSON file prepared before and stored on disk. To do so run::
85 85
86 86 import json
87 87 saml2user = json.loads(open('/path/to/saml2user.json','rb').read())
88 88
General Comments 0
You need to be logged in to leave comments. Login now