{"id":26493531,"url":"https://github.com/nulab/play2-oauth2-provider","last_synced_at":"2025-03-20T09:55:38.923Z","repository":{"id":54264428,"uuid":"79729099","full_name":"nulab/play2-oauth2-provider","owner":"nulab","description":"This library is enabled using scala-oauth2-provider in Play Framework","archived":false,"fork":false,"pushed_at":"2023-12-04T15:31:46.000Z","size":69,"stargazers_count":30,"open_issues_count":0,"forks_count":7,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-03-11T06:54:56.446Z","etag":null,"topics":["playframework","scala-oauth2-provider"],"latest_commit_sha":null,"homepage":null,"language":"Scala","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/nulab.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,"governance":null}},"created_at":"2017-01-22T16:24:56.000Z","updated_at":"2025-02-18T10:43:45.000Z","dependencies_parsed_at":"2023-10-31T17:27:15.917Z","dependency_job_id":null,"html_url":"https://github.com/nulab/play2-oauth2-provider","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nulab%2Fplay2-oauth2-provider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nulab%2Fplay2-oauth2-provider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nulab%2Fplay2-oauth2-provider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nulab%2Fplay2-oauth2-provider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nulab","download_url":"https://codeload.github.com/nulab/play2-oauth2-provider/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244591486,"owners_count":20477709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["playframework","scala-oauth2-provider"],"created_at":"2025-03-20T09:55:38.457Z","updated_at":"2025-03-20T09:55:38.918Z","avatar_url":"https://github.com/nulab.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# play2-oauth2-provider [![CI](https://github.com/nulab/play2-oauth2-provider/actions/workflows/ci.yml/badge.svg)](https://github.com/nulab/play2-oauth2-provider/actions/workflows/ci.yml)\n\nThis library is enabled using [scala-oauth2-provider](https://github.com/nulab/scala-oauth2-provider) in Play Framework.\n\n## Setup\n\nAdd \"play2-oauth2-provider\" to library dependencies of your project.\n\n```scala\nlibraryDependencies ++= Seq(\n  \"com.nulab-inc\" %% \"scala-oauth2-core\" % \"1.6.0\",\n  \"com.nulab-inc\" %% \"play2-oauth2-provider\" % \"2.0.0\"\n)\n```\n\n| Library version | Play version |\n| --------------- | ------------ |\n| 2.0.0           | 3.0.x        |\n| 1.6.0           | 2.9.x        |\n| 1.5.0           | 2.8.x        |\n| 1.4.2           | 2.7.x        |\n| 1.3.0           | 2.6.x        |\n| 1.2.0           | 2.5.x        |\n| 0.16.1          | 2.4.x        |\n| 0.14.0          | 2.3.x        |\n| 0.7.4           | 2.2.x        |\n\n## How to use\n\nYou should follow four steps below to work with Play Framework.\n\n- Customizing Grant Handlers\n- Define a controller to issue access token\n- Assign a route to the controller\n- Access to an authorized resource\n\nYou want to use which grant types are supported or to use a customized handler for a grant type, you should override the `handlers` map in a customized `TokenEndpoint` trait.\n\n```scala\nclass MyTokenEndpoint extends TokenEndpoint {\n  override val handlers = Map(\n    OAuthGrantType.AUTHORIZATION_CODE -\u003e new AuthorizationCode(),\n    OAuthGrantType.REFRESH_TOKEN -\u003e new RefreshToken(),\n    OAuthGrantType.CLIENT_CREDENTIALS -\u003e new ClientCredentials(),\n    OAuthGrantType.PASSWORD -\u003e new Password(),\n    OAuthGrantType.IMPLICIT -\u003e new Implicit()\n  )\n}\n```\n\nHere's an example of a customized `TokenEndpoint` that 1) only supports the `password` grant type, and 2) customizes the `password` grant type handler to not require client credentials:\n\n```scala\nclass MyTokenEndpoint extends TokenEndpoint {\n  val passwordNoCred = new Password() {\n    override def clientCredentialRequired = false\n  }\n\n  override val handlers = Map(\n    OAuthGrantType.PASSWORD -\u003e passwordNoCred\n  )\n}\n```\n\nDefine your own controller with mixining `OAuth2Provider` trait provided by this library to issue access token with customized `TokenEndpoint`.\n\n```scala\nclass MyController @Inject() (components: ControllerComponents)\n  extends AbstractController(components) with OAuth2Provider {\n  override val tokenEndpoint = new MyTokenEndpoint()\n\n  def accessToken = Action.async { implicit request =\u003e\n    issueAccessToken(new MyDataHandler())\n  }\n}\n```\n\nThen, assign a route to the controller that OAuth clients will access to.\n\n```\nPOST    /oauth2/access_token                    controllers.OAuth2Controller.accessToken\n```\n\nFinally, you can access to an authorized resource like this:\n\n```scala\nclass MyController @Inject() (components: ControllerComponents)\n  extends AbstractController(components) with OAuth2Provider {\n\n  val action = Action.async { request =\u003e\n    authorize(new MockDataHandler()) { authInfo =\u003e\n      val user = authInfo.user // User is defined on your system\n      // access resource for the user\n      ???\n    }\n  }\n}\n```\n\nIf you'd like to change the OAuth workflow, modify handleRequest methods of `TokenEndPoint` and `ProtectedResource` traits.\n\n### Using Action composition\n\nYou can write more easily authorize action by using Action composition.\n\nPlay Framework's documentation is [here](https://www.playframework.com/documentation/2.7.x/ScalaActionsComposition).\n\n```scala\nclass MyController @Inject() (components: ControllerComponents)\n  extends AbstractController(components) with OAuth2ProviderActionBuilders {\n\n  def list = AuthorizedAction(new MyDataHandler()) { request =\u003e\n    val user = request.authInfo.user // User is defined on your system\n    // access resource for the user\n  }\n}\n```\n\n## Examples\n\n### Play Framework 2.5\n\n- https://github.com/lglossman/scala-oauth2-deadbolt-redis\n- https://github.com/tsuyoshizawa/scala-oauth2-provider-example-skinny-orm\n\n### Play Framework 2.3\n\n- https://github.com/davidseth/scala-oauth2-provider-slick\n\n### Play Framework 2.2\n\n- https://github.com/oyediyildiz/scala-oauth2-provider-example\n- https://github.com/tuxdna/play-oauth2-server\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnulab%2Fplay2-oauth2-provider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnulab%2Fplay2-oauth2-provider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnulab%2Fplay2-oauth2-provider/lists"}