The SPID/CIE OIDC Federation Relying Party, written in Java

Overview

SPID/CIE OIDC Federation, for Java

Get invited Join the #spid openid Apache license java: 11 CodeQL codecov

SPID/CIE OIDC Federation (for Java) is a starter kit and example projects designed to ease the creation of an OpenID Connect Federation.

⚠️ This project is a work-in-progress, the first. Currently only the Relying Party has been completed.

👀 Watch this repository over GitHub to stay informed.

SUMMARY

Features

The purpose of this project is to provide a simple and immediate tool to integrate, in a WebApp developed with any Java Framework, the authentication services of SPID and CIE, automating the login/logout flows, the management of the OIDC-Core/OIDC-Federation protocols and their security profiles, and simplify the development activities.

It contains a starter-kit, a java library that exposes utilities, helpers and handlers you can include into your application in order to support the SPID/CIE OpenID Connect Authentication profile and OpenID Federation 1.0.

The library is developed using Java 11 with a "Low Level Java" approach to limit dependencies and allowing it to be included into projects mades with high-level framework like Spring, SpringBoot, OSGi, Quarkus and many others java based frameworks.

Actually only "OpenID Connect Relying Party" role is managed. The starter-kit provides:

  • Federation Entity Jwks and Metadata creation
  • OIDC Federation onboarding
  • SPID and CIE OpenID Connect login and logout
  • UserInfo claims retrieving
  • Build (discover) TrustChain of OPs
  • Multitenancy
  • see Usage for a more detailed list

The "OpenID Connect Provider" role is in my thoughts. Several requirements are already covered by the current starter-kit and the missing aspects should not require lot effort.

There are no plans to extends the starter-kit to allow you to implement an "OpenID Connect Federation Server".

preview

Usage

Both Snapshots and Released artifacts are available on GitHub Packages:

  • if you use Maven
<dependency>
  <groupId>it.spid.cie.oidc</groupId>
  <artifactId>it.spid.cie.oidc.starter.kit</artifactId>
  <version><!--replace with the wanted version --></version>
</dependency>
  • if you use Gradle
implementation group:'it.spid.cie.oidc', name:'it.spid.cie.oidc.starter.kit', version: 'wanted-version'

Unfortunately, as stated in the documentation, to use GitHub packages you have define GitHub repository in your ~/.m2/settings.xml together with your credentials.

The "starter-kit" is a backend library with few dependencies:

go here for more detailed information

Docker

The "starter-kit" is a library.

Sample projects using the library can be executed as docker or docker-compose. See examples's documentation.

Example projects

SpringBoot Relying Party example

A simple SpringBoot web application using the starter-kit to implement a Relying Party.

This application is for demo purpose only, please don't use it in production or critical environment.

Useful links

Contribute

Your contribution is welcome, no question is useless and no answer is obvious, we need you.

Contribute as end user

Please open an issue if you've discoverd a bug or if you want to ask some features.

Contribute as developer

This repository follow a Trunk based Development approach:

  • main branch contains the evolution of the project, where developed code is merged
  • x-branch are short-lived feature branches always connected to one or more issues (to better track and motivate requirements)

At the moment there is a GitHub Action allowing releasing from Trunk.

Please open your Pull Request on the main branch, but before start coding open an issue to describe your needs and inform the Team you are working on it.

In this project we adopt Semver and Conventional commits specifications.

License and Authors

This software is released under the Apache 2 License by:

Comments
  • [Docs] OIDC Federation

    [Docs] OIDC Federation

    You have to indicate in the readme what has been implemented by OIDC Federation.

    For example, explicit client registration workflow was not implemented.

    It is useful to indicate if the implementation of OIDC Federation can be fine for any type of entity or if it is narrowed on this RP.

    opened by peppelinux 4
  • [Doc] provide an animated gif of an example auth

    [Doc] provide an animated gif of an example auth

    [Doc] provide an animated gif of an example auth

    as made here https://github.com/italia/spid-cie-oidc-php#spidcie-oidc-federation-relying-party-for-php

    enhancement 
    opened by peppelinux 3
  • Fix test for

    Fix test for "expiresOn"

    Fields issuedAt and expiresOn are DateTime with seconds precision.

    We cannot use "now" to test expiration because test fails on fast machines

    opened by mmariuzzo 2
  • [Doc] Document how to run/build the Docker image in the docker compose of a example Federation

    [Doc] Document how to run/build the Docker image in the docker compose of a example Federation

    [Doc] Document how to run/build the Docker image in the docker compose of a example Federation

    Following this example https://github.com/italia/spid-cie-oidc-django#docker-compose

    all the example SPID/CIE RP projects must be configurable, runnable and usable in the docker-compose of the example federation. Please provide a Dockerfile, and push the docker image to dockerhub or any other public repository of docker image, with instruction about how to build/pull it and how to configure it in the example federation compose file.

    documentation enhancement 
    opened by peppelinux 0
  • Extract starter kit elements from SpringBoot MVP example

    Extract starter kit elements from SpringBoot MVP example

    Materialize starter kit elements:

    • [x] stateless utils
    • [x] schemas pojo
    • [x] models (pojo or builders without any persistence logic)
    • [x] helpers
    • [x] configuration options
    • [x] flow managers
    • [x] #5
    opened by mmariuzzo 0
  • Create final repo structure

    Create final repo structure

    Create the final (hopefully final) version of the repository to house the starter kit and examples.

    We'll have:

    • it.spid.cie.oidc as artifacts groupId
    • it.spid.cie.oidc.*** as artifactId
    opened by mmariuzzo 0
Releases(v0.2.1)
Owner
Developers Italia
Open source code and developers community of the Italian government
Developers Italia
Nagram is a third-party Telegram client based on Nekogram with not many but useful modifications

?? Nagram is a third-party Telegram client based on Nekogram with not many but useful modifications. Official site: https://nextalone.xyz Teleg

NextAlone 189 Dec 29, 2022
Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Gabriele Rizzo 865 Jan 2, 2023
The ByteSkript development kit, including resources for third-party libraries that are not contained within the standard runtime.

ByteSkript Development Kit Todo. The development kit is a set of advanced resources available for library creators. These are not available within the

null 1 Jan 8, 2022
Nekogram is a third-party Telegram client with not many but useful modifications

Nekogram is a third-party Telegram client with not many but useful modifications

Ketal 8 Nov 13, 2022
A plugin that open the GC command execution interface for third-party clients

gc-opencommand-plugin 中文 | English 一个为第三方客户端开放GC命令执行接口的插件 服务端安装 在 Release 下载 jar 放入 plugins 文件夹即可 控制台连接 首次启动时,会在 plugins 目录下生成一个 opencommand-plugin 目录

筱傑 222 Jan 1, 2023
UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect

UniFi Proxy UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect. For testing purposes only, it is recommended to purcha

Jan Heil 8 Dec 27, 2022
Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based system

FRC 2022 Team 5468's 2022 FRC robot code. This code is written in Java and is based off of WPILib's Java control system and utilizes a command based s

null 4 Oct 4, 2022
Creational design patterns written in Java

Java Design Patterns Creational design patterns implementation: Singleton, Factory Method, Builder written in Java. Getting Started No additional step

Tamerlan Satualdypov 11 Mar 7, 2022
This is a small library written in Java for minecraft login.

minecraft-auth-library This is a small library written in Java for minecraft login. Usage: Login with microsoft MinecraftAuthenticator minecraftAuthen

Sandro 7 Feb 5, 2022
Repository with Backend code for InnoTutor project. It is written on Java/Spring.

Backend ᅠ ᅠ Developers: Daniil Livitn, Roman Soldatov Contents Requirements API Database Google credentials Hosting and CI How to install locally Code

InnoTutor 20 Sep 17, 2022
Sample serverless application written in Java compiled with GraalVM native-image

Serverless GraalVM Demo This is a simple serverless application built in Java and uses the GraalVM native-image tool. It consists of an Amazon API Gat

AWS Samples 143 Dec 22, 2022
Simple Calender App Written in Java , Built with Gradle

Simple Calendar Simple Calendar is an just another open-source Android Calendar application written in java. Features Minimal & Clean Fullfilles needs

Aryan Sinha 2 Dec 3, 2021
A blogging system written in Java,

Nasher =========================== Nasher is a light Java blogging system Admin panel + Home pages Demo => http://jnasher.ir Admin Demo username/passw

j2eedev 15 Jul 12, 2018
A TUI written in Java to count votes, for example of a election.

Countvotes This is a project written entirely in Java that allows you to count votes. It is based on a TUI that allows you to dynamically add new peop

Jakob 2 Feb 1, 2022
Spring MVC backend written in Java for my wiki/blog

blog-api Spring MVC backend written in Java for my wiki/blog. Why Spring? Spring MVC and other parts of the Spring framework are still immensely popul

null 0 Mar 16, 2022
a mindustry v7 mod written in java. made by 12three7#5723.

Binary0011 a binary themed mod for mindustry v7. the "Java port" and complete rework of my old (hjson) mod "Binary0011". the way you can compile/imple

1237 16 Sep 1, 2022
Simple micro web framework written in Pragmatic Functional Java style

Pragmatica REST Example Example nano web framework written in Pragmatic Functional Java style. Example public class App { public static void main(

Sergiy Yevtushenko 8 Oct 21, 2022
first open-source brawl stars private server written in java!

Java-Brawl first open-source brawl stars private server written in java! (and first open-source v23 private server!) some stuff you should read thank

HaccerCat 11 Dec 27, 2022
Scripting language written in, and, designed to communicate with, java

mi-lang Scripting language designed to communicate with java, to allow for easy plugins, addons, etc in any project, all without having to create an e

null 7 Dec 17, 2022