work in progress: send user data to external identity provider (zitadel)
This commit is contained in:
parent
626ff6e673
commit
2698a578df
5 changed files with 46 additions and 7 deletions
|
@ -34,6 +34,7 @@ oidc_params = dict(
|
|||
op_config_url=oidc_provider + '/.well-known/openid-configuration',
|
||||
op_uris=None,
|
||||
op_keys=None,
|
||||
op_project_scope='urn:zitadel:iam:org:project:id:zitadel:aud',
|
||||
callback_url=getenv('OIDC_CALLBACK_URL', base_url + '/auth/callback'),
|
||||
client_id = oidc_client_id,
|
||||
cookie_name=getenv('OIDC_COOKIE_NAME', 'oidc_' + oidc_client_id),
|
||||
|
@ -43,7 +44,6 @@ oidc_params = dict(
|
|||
private_key_file=getenv('OIDC_SERVICE_USER_PRIVATE_KEY_FILE', '.private-key.json'),
|
||||
)
|
||||
|
||||
# access zitadel API
|
||||
zitadel_params = dict(
|
||||
private_key_file=getenv('ZITADEL_SERVICE_USER_PRIVATE_KEY_FILE', '.private-key.json')
|
||||
oidc_provider_endpoints = dict(
|
||||
user='v2/users/human',
|
||||
)
|
||||
|
|
|
@ -1,8 +1,43 @@
|
|||
# scopes.org.user
|
||||
|
||||
"""Basic user (principal) definitions + access to auth service (zitadel)."""
|
||||
"""Basic user account (principal) definitions + access to identity provider."""
|
||||
|
||||
from scopes.web import client
|
||||
from scopes import util
|
||||
|
||||
import config
|
||||
|
||||
|
||||
@dataclass
|
||||
class User:
|
||||
|
||||
name: str
|
||||
login: str
|
||||
email: str
|
||||
fullName: str
|
||||
|
||||
|
||||
class ExtUser:
|
||||
"""All infos for exchanging user data with an external service.
|
||||
|
||||
This base class implements the zitadel interface. For other
|
||||
identity providers sublass accordingly.
|
||||
"""
|
||||
|
||||
provider = 'zitatel'
|
||||
endpoints = dict(
|
||||
users='v2/users',
|
||||
)
|
||||
|
||||
def __init__(self, user, organization, userId=None, userIdPrefix=''):
|
||||
self.user = user
|
||||
|
||||
def asDict(self):
|
||||
return dict(username=self.user.name)
|
||||
|
||||
def send(self):
|
||||
clt = client.ApiClient(config.oidc_provider)
|
||||
data = self.asDict()
|
||||
res = clt.post(config.oidc_provider_endpoints['users'], data)
|
||||
|
||||
grants: List[str]
|
||||
|
|
|
@ -55,3 +55,7 @@ oidc_params = dict(
|
|||
cookie_crypt=getenv('OIDC_COOKIE_CRYPT', None),
|
||||
private_key_file=getenv('OIDC_SERVICE_USER_PRIVATE_KEY_FILE', '.private-key.json'),
|
||||
)
|
||||
|
||||
oidc_provider_endpoints = dict(
|
||||
user='v2/users/human',
|
||||
)
|
||||
|
|
|
@ -265,7 +265,7 @@ def authenticateClient(paramsName='oidc_params'):
|
|||
headers=dict(alg='RS256', kid=keyId))
|
||||
data = dict(
|
||||
grant_type='urn:ietf:params:oauth:grant-type:jwt-bearer',
|
||||
scope='openid urn:zitadel:iam:org:project:id:zitadel:aud',
|
||||
scope=' '.join(('openid', params['op_project_scope']))
|
||||
assertion=jwToken,
|
||||
)
|
||||
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
|
||||
|
@ -276,7 +276,7 @@ def authenticateClient(paramsName='oidc_params'):
|
|||
logger.error('authenticateClient: %s', resp.text)
|
||||
return None
|
||||
tdata = resp.json()
|
||||
print(tdata)
|
||||
#print(tdata)
|
||||
return tdata['access_token']
|
||||
|
||||
def loadPrivateKeyData(fn='.private-key.json'):
|
||||
|
|
|
@ -21,7 +21,7 @@ class ApiClient:
|
|||
def post(self, endpoint, data):
|
||||
headers = self.authentication()
|
||||
# self.makeUrl(endpoint)
|
||||
url = '/'.join(self.bareUrl, endpoint)
|
||||
url = '/'.join(self.baseUrl, endpoint)
|
||||
resp = requests.post(url, data=data, headers=headers)
|
||||
# check: resp.status_code
|
||||
data = resp.json()
|
||||
|
|
Loading…
Add table
Reference in a new issue