auth: user info -> principal
This commit is contained in:
		
							parent
							
								
									35cf8884bf
								
							
						
					
					
						commit
						2a52d8a481
					
				
					 2 changed files with 34 additions and 2 deletions
				
			
		|  | @ -9,6 +9,7 @@ from urllib.parse import urlencode | ||||||
| from zope.authentication.interfaces import IAuthentication, IPrincipal | from zope.authentication.interfaces import IAuthentication, IPrincipal | ||||||
| from zope.interface import implementer | from zope.interface import implementer | ||||||
| from zope.publisher.interfaces import Unauthorized | from zope.publisher.interfaces import Unauthorized | ||||||
|  | from zope.security.interfaces import IGroupAwarePrincipal | ||||||
| 
 | 
 | ||||||
| from scopes.server.browser import DefaultView, register | from scopes.server.browser import DefaultView, register | ||||||
| from scopes.storage.folder import DummyFolder, Root | from scopes.storage.folder import DummyFolder, Root | ||||||
|  | @ -51,13 +52,21 @@ JwtAuthentication = OidcAuthentication  # old name - still used? | ||||||
| authentication = OidcAuthentication(None) | authentication = OidcAuthentication(None) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @implementer(IPrincipal) | @implementer(IGroupAwarePrincipal) | ||||||
| class Principal: | class Principal: | ||||||
| 
 | 
 | ||||||
|     def __init__(self, id, data): |     def __init__(self, id, data): | ||||||
|         self.id = id |         self.id = id | ||||||
|         self.data = data |         self.data = data | ||||||
| 
 | 
 | ||||||
|  |     @property | ||||||
|  |     def title(self): | ||||||
|  |         return self.data['name'] | ||||||
|  | 
 | ||||||
|  |     @property | ||||||
|  |     def groups(self): | ||||||
|  |         return self.data.get('groups', []) | ||||||
|  | 
 | ||||||
|     def asDict(self): |     def asDict(self): | ||||||
|         data = self.data.copy() |         data = self.data.copy() | ||||||
|         data['id'] = self.id |         data['id'] = self.id | ||||||
|  | @ -85,7 +94,7 @@ class Authenticator(DummyFolder): | ||||||
|         data = self.loadSession() |         data = self.loadSession() | ||||||
|         print('*** authenticate', data) |         print('*** authenticate', data) | ||||||
|         if data and 'userid' in data: |         if data and 'userid' in data: | ||||||
|             id = data.pop('userid') |             id = self.params['principal_prefix'] + data.pop('userid') | ||||||
|             return Principal(id, data) |             return Principal(id, data) | ||||||
|         return None |         return None | ||||||
| 
 | 
 | ||||||
|  | @ -133,10 +142,14 @@ class Authenticator(DummyFolder): | ||||||
|         userInfo = requests.get(self.params['userinfo_url'], headers=headers) |         userInfo = requests.get(self.params['userinfo_url'], headers=headers) | ||||||
|         userData = userInfo.json() |         userData = userInfo.json() | ||||||
|         print('*** user data', userData) |         print('*** user data', userData) | ||||||
|  |         groupInfo = userData.get('urn:zitadel:iam:org:project:roles', {}) | ||||||
|  |         print('*** group info', groupInfo) | ||||||
|  |         groupInfo = userData.get('urn:zitadel:iam:org:project:roles') | ||||||
|         ndata = dict( |         ndata = dict( | ||||||
|                 userid=userData['preferred_username'], |                 userid=userData['preferred_username'], | ||||||
|                 name=userData['name'], |                 name=userData['name'], | ||||||
|                 email=userData['email'], |                 email=userData['email'], | ||||||
|  |                 groups=groupInfo.keys(), | ||||||
|                 access_token=tdata['access_token'], |                 access_token=tdata['access_token'], | ||||||
|         ) |         ) | ||||||
|         self.storeSession(ndata) |         self.storeSession(ndata) | ||||||
|  |  | ||||||
|  | @ -1,9 +1,12 @@ | ||||||
| # py-scopes/tests/config.py | # py-scopes/tests/config.py | ||||||
| 
 | 
 | ||||||
|  | from os import getenv | ||||||
|  | 
 | ||||||
| #from scopes.server.app import demo_app, zope_app | #from scopes.server.app import demo_app, zope_app | ||||||
| 
 | 
 | ||||||
| # server / app settings | # server / app settings | ||||||
| server_port = '8999' | server_port = '8999' | ||||||
|  | base_url = 'testing:' | ||||||
| #app = zope_app | #app = zope_app | ||||||
| 
 | 
 | ||||||
| # storage settings | # storage settings | ||||||
|  | @ -15,3 +18,19 @@ dbuser = None | ||||||
| dbpassword = None | dbpassword = None | ||||||
| dbschema = None | dbschema = None | ||||||
| 
 | 
 | ||||||
|  | # authentication settings | ||||||
|  | oidc_provider = 'testing:' | ||||||
|  | oidc_client_id = getenv('OIDC_CLIENT_ID', '12345') | ||||||
|  | oidc_params = dict( | ||||||
|  |     auth_url=getenv('OIDC_PROVIDER_URL', oidc_provider + '/oauth/v2/authorize'), | ||||||
|  |     token_url=getenv('OIDC_TOKEN_URL', oidc_provider + '/oauth/v2/token'), | ||||||
|  |     userinfo_url=getenv('OIDC_USERINFO_URL', oidc_provider + '/oidc/v1/userinfo'), | ||||||
|  |     callback_url=getenv('OIDC_CALLBACK_URL', base_url + '/auth_callback'), | ||||||
|  |     client_id=oidc_client_id, | ||||||
|  |     principal_prefix=getenv('OIDC_PRINCIPAL_PREFIX', 'loops.'), | ||||||
|  |     cookie_name=getenv('OIDC_COOKIE_NAME', 'oidc_' + oidc_client_id), | ||||||
|  |     cookie_domain=getenv('OIDC_COOKIE_DOMAIN', None), | ||||||
|  |     cookie_lifetime=getenv('OIDC_COOKIE_LIFETIME', '86400'), | ||||||
|  |     cookie_crypt=getenv('OIDC_COOKIE_CRYPT', None) | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue