{"id":38772016,"url":"https://github.com/inabajunmr/azidp4j","last_synced_at":"2026-01-17T12:08:37.351Z","repository":{"id":58148565,"uuid":"529271633","full_name":"inabajunmr/azidp4j","owner":"inabajunmr","description":"[alpha] Java OAuth 2.0 Authorization Server \u0026 OpenID Connect Identity Provider Library for any web application frameworks.","archived":false,"fork":false,"pushed_at":"2023-01-26T16:16:53.000Z","size":1556,"stargazers_count":4,"open_issues_count":11,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-02-27T09:32:31.782Z","etag":null,"topics":["authentication","authorization","oauth","oauth2","openid-connect"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inabajunmr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-26T13:37:20.000Z","updated_at":"2023-01-31T20:16:26.000Z","dependencies_parsed_at":"2023-02-14T19:31:35.348Z","dependency_job_id":null,"html_url":"https://github.com/inabajunmr/azidp4j","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/inabajunmr/azidp4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inabajunmr%2Fazidp4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inabajunmr%2Fazidp4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inabajunmr%2Fazidp4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inabajunmr%2Fazidp4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inabajunmr","download_url":"https://codeload.github.com/inabajunmr/azidp4j/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inabajunmr%2Fazidp4j/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28508464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T11:50:55.898Z","status":"ssl_error","status_checked_at":"2026-01-17T11:50:55.569Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","authorization","oauth","oauth2","openid-connect"],"created_at":"2026-01-17T12:08:34.285Z","updated_at":"2026-01-17T12:08:37.335Z","avatar_url":"https://github.com/inabajunmr.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [alpha] AzIdP4J\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.inabajunmr/AzIdP4J.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22io.github.inabajunmr%22%20AND%20a:%22AzIdP4J%22)\n![GitHub Actions](https://github.com/inabajunmr/azidp4j/actions/workflows/main.yml/badge.svg)\n\nAzIdP4J is library for Java OAuth 2.0 Authorization Server \u0026 OpenID Connect Identity Provider.\n\n## Supported Functions\n\n### Supported specifications\n\n* [The OAuth 2.0 Authorization Framework](https://www.rfc-editor.org/rfc/rfc6749)\n* [OpenID Connect Core 1.0](https://openid.net/specs/openid-connect-core-1_0.html)\n  * AzIdP4J doesn't support\n    * UserInfo endpoint\n    * Request object\n    * PPID\n    * Encrypted ID Token\n    * ...\n* [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636)\n* [OAuth 2.0 Token Introspection](https://datatracker.ietf.org/doc/html/rfc7662)\n* [OAuth 2.0 Token Revocation](https://datatracker.ietf.org/doc/html/rfc7009)\n* [OAuth 2.0 Dynamic Client Registration Protocol](https://www.rfc-editor.org/rfc/rfc7591)\n* [OpenID Connect Dynamic Client Registration 1.0](https://openid.net/specs/openid-connect-registration-1_0.html)\n\n### AzIdP4J doesn't support\n\nApplication needs to implement...\n\n* Web application server\n* Persistence\n* Client authentication\n* User management and authentication\n\n## Quickstart\n\n### Installation\n\n[Maven Repository](https://mvnrepository.com/artifact/io.github.inabajunmr/AzIdP4J/0.0.0-alpha+003)\n\n#### Maven\n\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.inabajunmr\u003c/groupId\u003e\n    \u003cartifactId\u003eAzIdP4J\u003c/artifactId\u003e\n    \u003cversion\u003e0.0.0-alpha+003\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle\n\n```\nimplementation group: 'io.github.inabajunmr', name: 'AzIdP4J', version: '0.0.0-alpha+003'\n```\n\n#### Gralde(Kotlin)\n\n```\nimplementation(\"io.github.inabajunmr:AzIdP4J:0.0.0-alpha+003\")\n```\n\n### Configuration\n\n```java\nvar rs256 =\n        new RSAKeyGenerator(2048)\n                .keyID(\"rs256key\")\n                .algorithm(new Algorithm(\"RS256\"))\n                .generate();\nvar jwks = new JWKSet(rs256);\nvar azidp =\n        AzIdP.initInMemory()\n                .jwkSet(jwks)\n                .idTokenKidSupplier((alg) -\u003e jwks.getKeys().get(0).getKeyID())\n                .issuer(\"https://idp.example.com\")\n                .grantTypesSupported(\n                        Set.of(GrantType.authorization_code, GrantType.client_credentials))\n                .scopesSupported(Set.of(\"openid\", \"item:read\"))\n                .customScopeAudienceMapper((scope) -\u003e Set.of(\"https://rs.example.com\"))\n                .build();\n```\n\n### Client Registration\n\n```java\nvar clientRequest =\n        new ClientRequest(\n                Map.of(\n                        \"redirect_uris\",\n                        Set.of(\"https://client.example.com/callback\"),\n                        \"grant_types\",\n                        Set.of(\"authorization_code\", \"client_credentials\"),\n                        \"scope\",\n                        \"openid item:read\"));\nvar clientResponse = azidp.registerClient(clientRequest);\nSystem.out.println(clientResponse.body);\n// {grant_types=[client_credentials, authorization_code], application_type=web, scope=openid item:read, require_auth_time=false, client_secret=f13b412b-f5b6-4432-9764-ffa891ef5ae9, redirect_uris=[https://client.example.com/callback], client_id=b9b60f89-97f3-4537-9604-a638d58df4d4, token_endpoint_auth_method=client_secret_basic, response_types=[code], id_token_signed_response_alg=RS256}\n```\n\n### Authorization Endpoint\n\n```java\n// This is constructed via http request generally.\nvar authorizationRequestQueryParameterMap =\n        Map.of(\n                \"scope\", \"openid item:read\",\n                \"response_type\", \"code\",\n                \"client_id\", clientResponse.body.get(\"client_id\").toString(),\n                \"redirect_uri\", \"https://client.example.com/callback\",\n                \"state\", \"abc\",\n                \"nonce\", \"xyz\");\nvar authorizationRequest =\n        new AuthorizationRequest(\n                \"inabajun\", // authenticated user\n                Instant.now().getEpochSecond(),\n                Set.of(\"openid\", \"item:read\"),\n                authorizationRequestQueryParameterMap);\nvar authorizationResponse = azidp.authorize(authorizationRequest);\nSystem.out.println(authorizationResponse.redirect().createRedirectTo());\n// https://client.example.com/callback?code=890d9cca-11a2-47b8-b879-1f584fdb0354\u0026state=abc\n```\n\n### Token Endpoint\n```java\nvar code = authorizationResponse.redirect().createRedirectTo().replaceAll(\".*code=([^\u0026]+).*\", \"$1\");\nvar tokenRequest =\n        new TokenRequest(\n                clientResponse.body.get(\"client_id\").toString(),\n                // This is constructed via http request generally.\n                Map.of(\n                        \"code\",\n                        code,\n                        \"grant_type\",\n                        \"authorization_code\",\n                        \"redirect_uri\",\n                        \"https://client.example.com/callback\"));\nvar tokenResponse = azidp.issueToken(tokenRequest);\nSystem.out.println(tokenResponse.body);\n// {access_token=2100bccf-6428-435d-bbac-6849bf1c28fc, refresh_token=50ecc0bd-a48a-4df4-a62e-768896ba4f24, scope=openid item:read, id_token=eyJraWQiOiJyczI1NmtleSIsImFsZyI6IlJTMjU2In0.eyJhdF9oYXNoIjoiZHZDcXhOQ3lNNG9kdWhfS1EwU0trZyIsInN1YiI6ImluYWJhanVuIiwiYXVkIjoiNGUzMWViZDItNTZmNy00MDM0LWIwNjEtNjcyNGEzNzUwYTEwIiwiYXpwIjoiNGUzMWViZDItNTZmNy00MDM0LWIwNjEtNjcyNGEzNzUwYTEwIiwiYXV0aF90aW1lIjoxNjY4OTMzNDU5LCJpc3MiOiJodHRwczovL2lkcC5leGFtcGxlLmNvbSIsImV4cCI6MTY2ODkzNDA1OSwiaWF0IjoxNjY4OTMzNDU5LCJub25jZSI6Inh5eiIsImp0aSI6ImY0YjhlMGUyLWIwMTktNDI1ZC1hMmRkLTdmZWUwNzFmYzM3NSJ9.n-YJnhe-NlQdzydRoPq2I0bSsWD-iyx3DHYToZvmUHnncgcpjEvNA2QGsWnSPShJickAAh3sJ53d4LenMJDpGzhJbeAYq3Fh6UgC_NsH5yYimbCFg1i6nVySV-ntbC6tmvAz1Ey1QsIHmZO5azGzbIbjm47jfl-NhZHbH4pg7lBbQ3_KmOy3kfmOil14Qyz8sNrT4LX_5T4nK3YjrPWDsCYlGm_cXHL5zwPnwZkWifU-D6ro-j9yK3E30kQ2qEsj_bhjzcpLem7-y67EfzuJTAhQbxPaasToh_lcPXaXS9krVodU1pPkk6aFs4IDurbqsoUGZH28YEOW4oowbSoyyw, state=abc, token_type=bearer, expires_in=600}\n```\n\n## Documentation\n\n* [Configuration](docs/config.md)\n  * How to initialize AzIdP4J\n* [Endpoint implementations](docs/endpoint-implementations.md)\n  * How to implement endpoints like authorization endpoint or token endpoint\n* [Client Registration](docs/client-registration.md)\n  * How to implement endpoint for client registration\n\n## Sample applications\n\n* [with Spring Boot and Spring Security](azidp4j-spring-security-sample)\n* [with com.sun.net.httpserver.HTTPServer](azidp4j-httpserver-sample)\n\n## Release\n\n### gradle.properties\n\n```\nsigning.keyId=xxx\nsigning.password=xxx\nsigning.secretKeyRingFile=/Users/xxx/.gnupg/xxx\n\nsonatypeUsername=xxx\nsonatypePassword=xxx\n```\n\n### version\n\nat azidp4j/build.gradle.kts version\n\n### publish\n\n```\n./gradlew azidp4j:publish\n```\n\n### release\n\nhttps://s01.oss.sonatype.org/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finabajunmr%2Fazidp4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finabajunmr%2Fazidp4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finabajunmr%2Fazidp4j/lists"}