work in progress: oidc auth - redirect to oidc provider OK, start processing callback
This commit is contained in:
parent
87c0c1db2e
commit
0207d12b46
3 changed files with 40 additions and 6 deletions
|
@ -20,5 +20,7 @@ dbschema = getenv('DBSCHEMA', 'demo')
|
||||||
|
|
||||||
# authentication settings
|
# authentication settings
|
||||||
oidc_params = dict(
|
oidc_params = dict(
|
||||||
clientid=getenv('OIDC_CLIENTID', '311613119816392525')
|
provider_url=getenv('OIDC_PROVIDER_URL', 'https://a1.cy7.de/oauth/v2/authorize'),
|
||||||
|
client_id=getenv('OIDC_CLIENT_ID', '311613119816392525'),
|
||||||
|
callback_url=getenv('OIDC_CALLBACK_URL', 'https://demo.cy7.de/auth/callback'),
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# scopes.server.app
|
# scopes.server.app
|
||||||
|
|
||||||
|
from zope.i18n.interfaces import IUserPreferredCharsets
|
||||||
|
from zope.interface import implementer
|
||||||
from zope.publisher.base import DefaultPublication
|
from zope.publisher.base import DefaultPublication
|
||||||
from zope.publisher.browser import BrowserRequest
|
from zope.publisher.browser import BrowserRequest
|
||||||
from zope.publisher.interfaces import NotFound
|
from zope.publisher.interfaces import NotFound
|
||||||
|
@ -11,12 +13,19 @@ import scopes.storage.concept # register container classes
|
||||||
from scopes.storage.folder import Root
|
from scopes.storage.folder import Root
|
||||||
|
|
||||||
|
|
||||||
|
@implementer(IUserPreferredCharsets)
|
||||||
|
class Request(BrowserRequest):
|
||||||
|
def getPreferredCharsets(self):
|
||||||
|
return ['UTF-8']
|
||||||
|
|
||||||
|
|
||||||
def zope_app_factory(config):
|
def zope_app_factory(config):
|
||||||
storageFactory = config.StorageFactory(config)
|
storageFactory = config.StorageFactory(config)
|
||||||
def zope_app(environ, start_response):
|
def zope_app(environ, start_response):
|
||||||
storage = storageFactory(config.dbschema)
|
storage = storageFactory(config.dbschema)
|
||||||
appRoot = Root(storage)
|
appRoot = Root(storage)
|
||||||
request = BrowserRequest(environ['wsgi.input'], environ)
|
#request = BrowserRequest(environ['wsgi.input'], environ)
|
||||||
|
request = Request(environ['wsgi.input'], environ)
|
||||||
request.setPublication(Publication(appRoot))
|
request.setPublication(Publication(appRoot))
|
||||||
request = publish(request, True)
|
request = publish(request, True)
|
||||||
response = request.response
|
response = request.response
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
# scopes.server.auth
|
# scopes.server.auth
|
||||||
|
|
||||||
|
from oic import oic, rndstr
|
||||||
|
from oic.oic.message import AuthorizationResponse
|
||||||
|
|
||||||
from zope.authentication.interfaces import IAuthentication
|
from zope.authentication.interfaces import IAuthentication
|
||||||
from zope.interface import implementer
|
from zope.interface import implementer
|
||||||
from zope.publisher.interfaces import Unauthorized
|
from zope.publisher.interfaces import Unauthorized
|
||||||
|
@ -56,7 +59,27 @@ class Authenticator(DummyFolder):
|
||||||
def login(self, request):
|
def login(self, request):
|
||||||
params = config.oidc_params
|
params = config.oidc_params
|
||||||
print('*** login', self, request.getTraversalStack(), request['PATH_INFO'])
|
print('*** login', self, request.getTraversalStack(), request['PATH_INFO'])
|
||||||
print('***', dir(request))
|
#print('***', dir(request))
|
||||||
|
client = oic.Client()
|
||||||
|
#providerInfo = client.provider_config(params['provider_url'])
|
||||||
|
#print('***', providerInfo)
|
||||||
|
#client.register(providerInfo['registration_endpoint'], application_type='web')
|
||||||
|
requestArgs = dict(
|
||||||
|
client_id=params['client_id'],
|
||||||
|
response_type='code', # 'code id_token token',
|
||||||
|
state=rndstr(), nonce=rndstr(),
|
||||||
|
scope=['openid', 'profile'],
|
||||||
|
redirect_uri=params['callback_url'],
|
||||||
|
)
|
||||||
|
authReq = client.construct_AuthorizationRequest(request_args=requestArgs)
|
||||||
|
#loginUrl = authReq.request(client.authorization_endpoint)
|
||||||
|
loginUrl = authReq.request(params['provider_url'])
|
||||||
|
print('***', loginUrl)
|
||||||
|
request.response.redirect(loginUrl, trusted=True)
|
||||||
|
|
||||||
|
def callback(self, request):
|
||||||
|
print('*** callback', self, request.form)
|
||||||
|
code = request.form['code']
|
||||||
|
|
||||||
|
|
||||||
@register('auth', Root)
|
@register('auth', Root)
|
||||||
|
@ -70,11 +93,11 @@ def login(context, request):
|
||||||
return DefaultView(context, request)
|
return DefaultView(context, request)
|
||||||
|
|
||||||
@register('callback', Authenticator)
|
@register('callback', Authenticator)
|
||||||
def login(context, request):
|
def callback(context, request):
|
||||||
print('*** callback', context, request['PATH_INFO'], request.getTraversalStack())
|
context.callback(request)
|
||||||
return DefaultView(context, request)
|
return DefaultView(context, request)
|
||||||
|
|
||||||
@register('logout', Authenticator)
|
@register('logout', Authenticator)
|
||||||
def login(context, request):
|
def logout(context, request):
|
||||||
print('*** logout', context, request['PATH_INFO'], request.getTraversalStack())
|
print('*** logout', context, request['PATH_INFO'], request.getTraversalStack())
|
||||||
return DefaultView(context, request)
|
return DefaultView(context, request)
|
||||||
|
|
Loading…
Add table
Reference in a new issue