{"id":18809651,"url":"https://github.com/beomjunlee/oauth2-github-api","last_synced_at":"2026-05-17T00:42:07.652Z","repository":{"id":77569340,"uuid":"352880321","full_name":"BeomjunLee/OAuth2-Github-api","owner":"BeomjunLee","description":":orange_book:OAuth2 GitHub 로그인 \u0026 GitHub Api 사용 연습:orange_book:","archived":false,"fork":false,"pushed_at":"2021-06-23T17:36:28.000Z","size":103,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-22T02:40:59.487Z","etag":null,"topics":["github-api","springboot","springdatajpa","springsecurity-oauth2"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BeomjunLee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-30T05:26:16.000Z","updated_at":"2021-06-23T17:36:31.000Z","dependencies_parsed_at":"2023-03-12T01:02:48.667Z","dependency_job_id":null,"html_url":"https://github.com/BeomjunLee/OAuth2-Github-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BeomjunLee/OAuth2-Github-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeomjunLee%2FOAuth2-Github-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeomjunLee%2FOAuth2-Github-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeomjunLee%2FOAuth2-Github-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeomjunLee%2FOAuth2-Github-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BeomjunLee","download_url":"https://codeload.github.com/BeomjunLee/OAuth2-Github-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BeomjunLee%2FOAuth2-Github-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274470709,"owners_count":25291611,"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","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["github-api","springboot","springdatajpa","springsecurity-oauth2"],"created_at":"2024-11-07T23:17:12.082Z","updated_at":"2026-05-17T00:42:07.608Z","avatar_url":"https://github.com/BeomjunLee.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"## OAuth2 Github 연동 및 Github Api 사용\noAuth2 로그인의 자세한 내용은 블로그에 포스팅하였습니다 https://blog.naver.com/qjawnswkd/222293370027\u003cbr\u003e\n\n### Gradle\n```java\n//spring security oauth2\nimplementation 'org.springframework.boot:spring-boot-starter-oauth2-client'\nimplementation 'org.springframework.boot:spring-boot-starter-security'\n\n//github api\nimplementation group: 'org.kohsuke', name: 'github-api', version: '1.125'\n  ```\n  \n  \u003cbr\u003e\n\n### application.yml\n```java\n## OAuth2\nspring:\n  security:\n    oauth2:\n      client:\n        registration:\n          github:\n            client-id: {클라이언트 id}\n            client-secret: {클라이언트 secret}       \n```\n\n\u003cbr\u003e\n\n### Service OAuth2\n```java\n@Service\n@RequiredArgsConstructor\npublic class CustomOAuth2MemberService implements OAuth2UserService{\n\n    private final MemberRepository memberRepository;\n    private final HttpSession session;\n\n    @Override\n    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {\n\n        DefaultOAuth2UserService service = new DefaultOAuth2UserService();\n        OAuth2User oAuth2User = service.loadUser(userRequest);\n\n        Member member = saveOrUpdate(oAuth2User);\n\n        session.setAttribute(\"oAuthToken\", userRequest.getAccessToken().getTokenValue());\n\n        return new DefaultOAuth2User(\n                Collections.singleton(new SimpleGrantedAuthority(member.getRole())),\n                oAuth2User.getAttributes(), \"login\");\n        //nameAttributeKey = Principal name에 저장됨\n    }\n\n    public Member saveOrUpdate(OAuth2User oAuth2User) {\n        Member oAuthMember = Member.builder()\n                .username(oAuth2User.getAttribute(\"login\"))\n                .name(oAuth2User.getAttribute(\"name\"))\n                .picture(oAuth2User.getAttribute(\"avatar_url\"))\n                .role(MemberRole.USER)\n                .build();\n\n        Member member = memberRepository.findByUsername(oAuthMember.getUsername())\n                .map(entity -\u003e entity.update(oAuthMember))\n                .orElse(oAuthMember);\n        return memberRepository.save(member);\n    }\n}\n```\n\n\u003cbr\u003e\n\n### OAuth2 Result\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583581-d8e86980-b142-11eb-88e2-855827ed6ece.PNG\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583584-dc7bf080-b142-11eb-99ba-5ed94514339d.png\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583587-e1d93b00-b142-11eb-99ba-009fb8e858e6.png\"\u003e\n\n\u003cbr\u003e\n\n### Github Api 사용 example\n```java\n//로그인시 얻어지는 accessToken 값과, 유저이름으로 Github api 접근\n//GitHub를 통해 다양한 api 에 접근할 수 있다.\nGitHub gitHub = new GitHubBuilder()\n                .withOAuthToken(session.getAttribute(\"oAuthToken\").toString(), oAuth2User.getName()).build(); \n                \n//accessToken 이용 안할시 1시간에 50번만 호출 가능하고 이용시에는 5000번까지 가능하다\t\t\nGHUser user = gitHub.getUser(oAuth2User.getName()); \n//repo 이름으로 찾기 예시\nGHRepository repository = user.getRepository(\"microservices-spring-cloud\"); \n \n //아이디 로그인 없이 그냥 불러올수 있다 (1시간 50번 요청 제한)\nGitHub git = new GitHubBuilder().build(); \n//로그인 안할시에는 repo 검색시 앞에 유저이름이 필수로 들어가야한다.\nGHRepository repository = git.getRepository(\"BeomjunLee/microservices-spring-cloud\"); \n\n//등등 다양한 Github api 를 불러올수 있다.\n```\n\n\u003cbr\u003e\n\n몇가지 예제를 적자면 \u003cbr\u003e\u003cbr\u003e\n\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583739-d6d2da80-b143-11eb-8f22-18c1ef98cc28.png\"\u003e\u003cbr\u003e\nGHUser 를 통해 다양한 api 요청 메서드에 접근할 수 있다.\u003cbr\u003e\u003cbr\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583780-0eda1d80-b144-11eb-9a99-6f62ed1fe408.png\"\u003e\u003cbr\u003e\n특정 repo 에 접근해서 커밋과 전체 커밋 갯수를 확인할 수 있다.\u003cbr\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583799-26190b00-b144-11eb-9010-e115c187622d.png\"\u003e\u003cbr\u003e\n\u003cbr\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583843-71331e00-b144-11eb-8e23-5bd7116356d0.png\"\u003e\u003cbr\u003e\n특정 repo 의 기여자들 리스트와 커밋 현황을 확인할 수 있다.\u003cbr\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/69130921/117583864-88720b80-b144-11eb-89d7-14d92054e507.png\"\u003e\u003cbr\u003e\u003cbr\u003e\n외에 다양한 api 를 사용할 수 있다.\n\u003cbr\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeomjunlee%2Foauth2-github-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeomjunlee%2Foauth2-github-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeomjunlee%2Foauth2-github-api/lists"}