Hi all,
Since 2016 the OpenConext software stack supports OpenID Connect as authentication protocol, next to
the well established SAML2 protocol.
When we started working on OpenID Connect, we decided not to reinvent the wheel ourselves, and used
an existing open source OpenID Connect Provider implementation, MitreID Connect. It was a good fit
at that time for the purpose that we had in mind and allowed us to have a working OpenID Connect
endpoint with a few weeks of development efforts.
Unfortunately, the MitreID Connect project development stopped for the most part after we started
using it. Furthermore, where the implementation out of the box worked very well, adding or removing
functionality proved to be quite challenging. However, it has served us very well in understanding
the challenges and possibilities of the OpenID Connect protocol, and having a working implementation
in a short period of time.
As we wanted to implement extra functionality, for example support for using OpenConext to secure
APIs, or integration with Manage, we decided to reimplement the OpenID Connect interface of
OpenConext, with the following starting points:
* The "trusted proxy" model works very well, and should not be changed. That means that a lot of the
heavy lifting is done by Engineblock: ACL's, attribute release policies, authorization decisions,
attribute aggregation, generating identifiers,
* A GUI is not needed: Entities are managed in OpenConext Manage
* For maximum flexibility in terms of features, we will build our own implementation on top of an
existing and well-supported library
* Simplify the publicly available OpenID configuration on the .well-known endpoint
* Support at least the same feature set as the current implementation
Furthermore, we are implementing a few new features:
1) Allowing Resource Servers to be connected to OpenConext: This would allow an OpenID Connect
Relying Party to request an access token with which it can then authenticate with a Resource Server.
The resource server in turn can check the access token, and if allowed, receive user information,
like the subject and configured claims. A typical use case would be a mobile app, requesting data
from an API.
2) Support PKCE which can be used to protect mobile and browser based apps.
3) The userinfo endpoint currently needs a local cache of user claims (attributes). The idea is to
encrypt these claims in the access token. When a client queries the userinfo endpoint, the claims
can be decrypted on the fly, eliminating the need to cache the claims.
Development work has started already and can be tracked here:
https://github.com/OpenConext/OpenConext-oidcng . The library that we chose is the Nimbus OAuth 2.0
SDK with OpenID Connect extensions.
We welcome any input you might have. We hope to be able to release a public alpha release soon.
Cheers,
Bart