ISocialAuthProvider.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. namespace Application.Abstractions.Authentication;
  2. /// <summary>소셜 provider 토큰 교환 결과 (authorization code → access token)</summary>
  3. public sealed record SocialTokens(
  4. string AccessToken,
  5. string? RefreshToken,
  6. DateTime ExpiresAt,
  7. string[] Scopes
  8. );
  9. /// <summary>
  10. /// 소셜 provider 프로필 조회 결과.
  11. /// Email 은 카카오 선택동의 미동의 시 null. EmailVerified 는 provider 가 검증을 보장하는 경우만 true
  12. /// (네이버는 연락처 이메일이라 항상 false — d5 §③ 계정 매칭 정책).
  13. /// </summary>
  14. public sealed record SocialUserInfo(
  15. string ProviderUserKey,
  16. string? Email,
  17. bool EmailVerified,
  18. string? Nickname,
  19. string? ProfileImageUrl
  20. );
  21. /// <summary>
  22. /// Naver/Kakao authorization code 로그인 provider (d5 §③).
  23. /// Google 로그인은 GIS id_token 방식(IGoogleTokenValidator) 현행 유지 — 비목표.
  24. /// </summary>
  25. public interface ISocialAuthProvider
  26. {
  27. /// <summary>"Naver" | "Kakao"</summary>
  28. string Provider { get; }
  29. /// <summary>동의 화면 authorize URL 생성 (state 는 호출자가 생성/보관 후 콜백에서 대조)</summary>
  30. string GetAuthorizationUrl(string clientId, string redirectUri, string state);
  31. /// <summary>승인 코드 → 토큰 교환. 실패 시 null (사유는 provider 가 로깅)</summary>
  32. Task<SocialTokens?> ExchangeCodeAsync(string code, string redirectUri, string? state, string clientId, string? clientSecret, CancellationToken ct);
  33. /// <summary>액세스 토큰으로 프로필 조회. 실패 시 null</summary>
  34. Task<SocialUserInfo?> GetUserInfoAsync(string accessToken, CancellationToken ct);
  35. }