An open API service indexing awesome lists of open source software.

https://github.com/beomjunlee/oauth2-github-api

:orange_book:OAuth2 GitHub 로그인 & GitHub Api 사용 연습:orange_book:
https://github.com/beomjunlee/oauth2-github-api

github-api springboot springdatajpa springsecurity-oauth2

Last synced: 5 months ago
JSON representation

:orange_book:OAuth2 GitHub 로그인 & GitHub Api 사용 연습:orange_book:

Awesome Lists containing this project

README

          

## OAuth2 Github 연동 및 Github Api 사용
oAuth2 로그인의 자세한 내용은 블로그에 포스팅하였습니다 https://blog.naver.com/qjawnswkd/222293370027

### Gradle
```java
//spring security oauth2
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'

//github api
implementation group: 'org.kohsuke', name: 'github-api', version: '1.125'
```


### application.yml
```java
## OAuth2
spring:
security:
oauth2:
client:
registration:
github:
client-id: {클라이언트 id}
client-secret: {클라이언트 secret}
```


### Service OAuth2
```java
@Service
@RequiredArgsConstructor
public class CustomOAuth2MemberService implements OAuth2UserService{

private final MemberRepository memberRepository;
private final HttpSession session;

@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {

DefaultOAuth2UserService service = new DefaultOAuth2UserService();
OAuth2User oAuth2User = service.loadUser(userRequest);

Member member = saveOrUpdate(oAuth2User);

session.setAttribute("oAuthToken", userRequest.getAccessToken().getTokenValue());

return new DefaultOAuth2User(
Collections.singleton(new SimpleGrantedAuthority(member.getRole())),
oAuth2User.getAttributes(), "login");
//nameAttributeKey = Principal name에 저장됨
}

public Member saveOrUpdate(OAuth2User oAuth2User) {
Member oAuthMember = Member.builder()
.username(oAuth2User.getAttribute("login"))
.name(oAuth2User.getAttribute("name"))
.picture(oAuth2User.getAttribute("avatar_url"))
.role(MemberRole.USER)
.build();

Member member = memberRepository.findByUsername(oAuthMember.getUsername())
.map(entity -> entity.update(oAuthMember))
.orElse(oAuthMember);
return memberRepository.save(member);
}
}
```


### OAuth2 Result



### Github Api 사용 example
```java
//로그인시 얻어지는 accessToken 값과, 유저이름으로 Github api 접근
//GitHub를 통해 다양한 api 에 접근할 수 있다.
GitHub gitHub = new GitHubBuilder()
.withOAuthToken(session.getAttribute("oAuthToken").toString(), oAuth2User.getName()).build();

//accessToken 이용 안할시 1시간에 50번만 호출 가능하고 이용시에는 5000번까지 가능하다
GHUser user = gitHub.getUser(oAuth2User.getName());
//repo 이름으로 찾기 예시
GHRepository repository = user.getRepository("microservices-spring-cloud");

//아이디 로그인 없이 그냥 불러올수 있다 (1시간 50번 요청 제한)
GitHub git = new GitHubBuilder().build();
//로그인 안할시에는 repo 검색시 앞에 유저이름이 필수로 들어가야한다.
GHRepository repository = git.getRepository("BeomjunLee/microservices-spring-cloud");

//등등 다양한 Github api 를 불러올수 있다.
```


몇가지 예제를 적자면



GHUser 를 통해 다양한 api 요청 메서드에 접근할 수 있다.




특정 repo 에 접근해서 커밋과 전체 커밋 갯수를 확인할 수 있다.







특정 repo 의 기여자들 리스트와 커밋 현황을 확인할 수 있다.




외에 다양한 api 를 사용할 수 있다.