MS OAuth로그인을 하고, 해당 로그인 정보를 이용하여 Outlook에 등록한 일정 정보를 얻어올 수 있다.
찾느라 한동안 삽질했었어서... 까먹지 말자고 기록하기 위해 남김.
1. MS OAuth로그인 할 때, 권한 설정해주기.
MS OAuth로그인을 하는건 좋은데, 해당앱을 통해 로그인 하면 어디까지 권한을 받을 수 있을까? 그냥 냅두면 얻을 수 있는 권한은 없다. (당연하지..)
'앱등록' - '내가선택한앱' - 'API 사용권한'을 들어가자.
권한 추가를 누르면 아래와 같이 팝업이 발생한다.
나는 메일 읽고, 캘린더 연동할 것이므로.. Graph를 선택하고, 권한은 '위임된 권한'을 선택한다.
그러면 권한 목록이 주루룩~ 나온다.
Calendar는 Calendars 그룹에 가서 선택해주면 된다. 나의 경우 내 앱에서 Calendar정보를 읽기만 할 것이므로.. Calendars.Read 만 체크.
그 외에 원하는 권한을 체크한 후, '권한추가'를 눌러서 추가하면 된다.
그러면 할당된 권한 목록이 아래와 같이 표시된다.
여기서 'API/권한 이름'을 잘 기억할 것.
우리가 MSAL라이브러리를 이용하여, OAuth요청을 생성할 때, scope에 저 값들이 들어가야한다.
OAuth로그인 사용자 이메일 주소를 얻고싶으면 scope에 email이, Calendar를 읽어오려면 Calendars.Read 가 포함되면 된다.
2. 인증 호출 전 설정하기
나의 경우 authenrication.properties에 scope등을 등록해두었다. 그래서 거기에 값을 수정함.
*뱀발 : authority에서 나의 경우 테넌트ID자리에 'common'을 넣어두었다. 어느 사용자든지 다 들어올 수 있어야해서.. 그래서 common으로 ID를 지정해 주었음.
oauth2.aad.scopes = ... Calendars.Read ... << 이런식으로 기입해주고 OAuth로그인을 하면, 해당 인증 정보를 가지고 캘린더 정보를 읽어올 수 있다.
3. 인증호출 (생략) 후, 캘린더 정보 읽어오기.
내가 작성한 코드는 아래와 같다.
public void myFunc(){
try{
CalendarGetScheduleParameterSet params = new CalendarGetScheduleParameterSet();
DateTimeTimeZone startDate = new DateTimeTimeZone();
startDate.dateTime= "2022-11-01T00:00:00";
startDate.timeZone = "Korea Standard Time";
params.startTime = startDate;
params.endTime = endDate; //검색 종료일자
params.schdules = loginUserList; //calendar가져올 Email ID
GraphServiceClient gsClient = GraphServiceClient.builder()
.authenticationProvider(new MsalGraphAuthenticationProvider(userInfo))
.buildClient();
CalendarGetScheduleCollectionPage calendars = gsClient.me()
.calendar()
.getSchedule(params)
.buildRequest()
.post();
List<ScheduleInformation> scheduleLists = calendar.getCurrentPage();
scheduleLists.forEach(scheduleInfo -> {
scheduleInfo.scheduleItems.forEach( schedulItem-> {
blabla;
});
});
}catch(Exceptions... ){
//Exception들 처리할 것.
}
}
위와 같이 사용하면 된다.
댓글