{"id":13698763,"url":"https://github.com/abapChaoLiu/abap_jwt_generator","last_synced_at":"2025-05-04T04:30:36.212Z","repository":{"id":54395142,"uuid":"262469333","full_name":"abapChaoLiu/abap_jwt_generator","owner":"abapChaoLiu","description":"ABAP JWT Generator","archived":false,"fork":false,"pushed_at":"2021-02-20T23:07:58.000Z","size":79,"stargazers_count":15,"open_issues_count":2,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-13T03:34:50.042Z","etag":null,"topics":["abap","jwt","jwt-bearer-tokens","jwt-token","sap"],"latest_commit_sha":null,"homepage":null,"language":"ABAP","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/abapChaoLiu.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":"2020-05-09T02:11:00.000Z","updated_at":"2024-09-11T19:33:51.000Z","dependencies_parsed_at":"2022-08-13T14:20:43.406Z","dependency_job_id":null,"html_url":"https://github.com/abapChaoLiu/abap_jwt_generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"abapChaoLiu/abap_template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abapChaoLiu%2Fabap_jwt_generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abapChaoLiu%2Fabap_jwt_generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abapChaoLiu%2Fabap_jwt_generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abapChaoLiu%2Fabap_jwt_generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abapChaoLiu","download_url":"https://codeload.github.com/abapChaoLiu/abap_jwt_generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252288912,"owners_count":21724323,"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":["abap","jwt","jwt-bearer-tokens","jwt-token","sap"],"created_at":"2024-08-02T19:00:52.647Z","updated_at":"2025-05-04T04:30:35.681Z","avatar_url":"https://github.com/abapChaoLiu.png","language":"ABAP","funding_links":[],"categories":["Categories"],"sub_categories":["🪄 Data Processing"],"readme":"![abapLint](https://github.com/abapChaoLiu/abap_jwt_generator/workflows/abapLint/badge.svg?branch=master)\n\n# ABAP JWT Generator\nGenerate Json Web Token (JWT) in ABAP.\n\n## Demo 1 - method get_jwt_by_profile().\n\nIf JWT profile is maintained in table ZJWT_PROFILE, use method get_jwt_by_profile() to derive JWT token by profile name.\n\n![JWT profile screenshot](/doc/jwt_profile.png)\n\n```abap\nDATA: jwt_generator TYPE REF TO zcl_jwt_generator,\n      jwt TYPE string.\n\nCREATE OBJECT jwt_client.\njwt = jwt_client-\u003eget_jwt_by_profile( 'JWT_PROFILE_NAME' ).\n```      \n\n## Demo 2 - method generate_jwt().\nIf JWT profile is not maintained, use method generate_jwt() to derive JWT token.\n\n```abap\nREPORT zrpt_jwt_generator_demo.\n\nDATA: jwt_generator TYPE REF TO zcl_jwt_generator.\nDATA: jwt_header TYPE zcl_jwt_generator=\u003ety_jwt_header,\n      jwt_claim  TYPE zcl_jwt_generator=\u003ety_jwt_claim.\nDATA: exp_second        TYPE int8,\n      ssf_info           TYPE ssfinfo.\nDATA: start_timestamp TYPE timestamp VALUE '19700101000000',\n      ssf_id          TYPE ssfid VALUE '\u003cimplicit\u003e',\n      \"PSE profile with private key\n      ssf_profile     TYPE ssfprof VALUE 'SAPZJWTSF001.pse'.\n\n\njwt_header-alg  = 'RS256'.\njwt_claim = VALUE #(  iss = 'UserID'\n                      sub = 'example@gmail.com'\n                      aud = 'https://login.example.com'\n                      exp = exp_second ).\n\nssf_info = VALUE #( id = ssf_id profile = ssf_profile ).\n\nCREATE OBJECT jwt_generator.\nTRY.\n    jwt_generator-\u003egenerate_jwt(\n      EXPORTING\n        jwt_header     = jwt_header\n        jwt_claim      = jwt_claim\n        ssf_info       = ssfinfo\n      RECEIVING\n        jwt            = DATA(jwt) ).\n  CATCH zcx_jwt_generator INTO DATA(lo_exp).\n    WRITE /: 'ERROR when generate JWT token.'.\n    WRITE /: lo_exp-\u003eget_text( ).\nENDTRY.\n```\n\n## Demo 3 - method get_access_token_by_profile().\n\nIf JWT profile is maintained in table ZJWT_PROFILE, use method get_access_token_by_profile() to get JWT Access Token.\n\n![JWT profile screenshot](/doc/jwt_profile.png)\n\n```abap\nDATA: jwt_generator TYPE REF TO zcl_jwt_generator,\n      jwt_access_token TYPE string.\n\nCREATE OBJECT jwt_client.\njwt_access_token = jwt_client-\u003eget_access_token_by_profile( 'JWT_PROFILE_NAME' ).\n```\n\n## Demo 4 - method generate_jwt_with_secret().\nYou can use method generate_jwt_with_secret() to generate a JWT with the secret key, like [JWT Debugger](https://jwt.io/#debugger-io).\n```abap\nGET TIME STAMP FIELD DATA(timestamp).\n\nDATA(jwt_generator) = NEW zcl_jwt_generator( ).\n\nTRY.\n    DATA(jwt_result) =\n        jwt_generator-\u003egenerate_jwt_with_secret(\n            jwt_header = VALUE #( alg  = 'HS256' typ = 'JWT' )\n            jwt_claim  = VALUE #( sub  = '1234567890'\n                                  name = 'John Doe'\n                                  iat  = jwt_generator-\u003econvert_abap_timestamp_to_unix( timestamp ) )\n            secret     = '1WRAv0Usf90-jr2W7UQBQBLvIBBFq8vumq-VzrR3h7E'\n            algorithm  = 'SHA256' ).\n  CATCH zcx_jwt_generator INTO DATA(lx_jwt).\nENDTRY.\n```\n\n## Credits and references\n\nClass ZCL_JWT_Generator is modified from Dimitri Seifmann's post [Connect from AS ABAP to Google Cloud Platform App-Engine resource secured with Google Identity-Aware Proxy](https://blogs.sap.com/2019/11/10/connect-from-as-abap-to-google-cloud-platform-app-engine-resource-secured-with-google-identity-aware-proxy/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FabapChaoLiu%2Fabap_jwt_generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FabapChaoLiu%2Fabap_jwt_generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FabapChaoLiu%2Fabap_jwt_generator/lists"}