C# API 2.0 인증
작성하신 내용은 누구나 볼 수 있습니다.
계정 이름, 도메인 이름, Client ID, Client Secret 등의 비공개 정보는 기입하지마세요.
안녕하세요
API 2.0 JWT 인증을 하려고 합니다.
C# 소스이며, 인증서버로 토큰 요청할 때 400번 코드로 BadRequest 에러가 납니다.
JWT 토큰 데이터는 에러없이 가져오나, 인증서버 토큰을 가져올떄 에러가 납니다.
1. JWT
static string GenerateJwtToken(string clientId, string serviceAccount, string privateKeyString)
{
// RSA 개인키 PEM 문자열을 RSA 개체로 변환
RSA rsa;
using (var stringReader = new System.IO.StringReader(privateKeyString))
{
var pemReader = new PemReader(stringReader);
var pemObject = pemReader.ReadObject();
var rsaParameters = (RsaPrivateCrtKeyParameters)pemObject;
RSAParameters rsaParams = DotNetUtilities.ToRSAParameters(rsaParameters);
rsa = RSA.Create();
rsa.ImportParameters(rsaParams);
}
// RSA 개인키를 사용하여 RsaSecurityKey 생성
var rsaSecurityKey = new Microsoft.IdentityModel.Tokens.RsaSecurityKey(rsa);
// RsaSecurityKey를 사용하여 SigningCredentials 생성
var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(rsaSecurityKey, Microsoft.IdentityModel.Tokens.SecurityAlgorithms.RsaSha256);
// 클레임 세트 정보 설정
var claims = new[]
{
new Claim("iss", clientId),
new Claim("sub", serviceAccount),
new Claim("iat", UnixTime.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer),
new Claim("exp", UnixTime.ToUnixTimeSeconds(3600).ToString(), ClaimValueTypes.Integer)
};
// JWT 토큰 생성
var jwt = new JwtSecurityToken(claims: claims, signingCredentials: signingCredentials);
// JWT 문자열로 변환
var tokenHandler = new JwtSecurityTokenHandler();
var tokenString = tokenHandler.WriteToken(jwt);
return tokenString;
}
2. 인증서버 토큰
static string GetServiceToken(string clientId, string clientSecret, string jwtToken)
{
// 토큰 요청을 위한 데이터 준비
var requestData = new Dictionary<string, string>
{
{ "grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer" },
{ "client_id", clientId },
{ "client_secret", clientSecret },
{ "assertion", jwtToken },
{ "scope", "bot user.read" }
};
var requestContent = new FormUrlEncodedContent(requestData);
// 토큰 요청 보내기
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
var response = httpClient.PostAsync("https://auth.worksmobile.com/oauth2/v2.0/token", requestContent).Result;
if (response.IsSuccessStatusCode)
{
var responseBody = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(responseBody);
return responseBody;
}
else
{
Console.WriteLine("Error: " + response.StatusCode);
return null;
}
}
}
게시글에 새로운 댓글이 달리면 알림을 전송합니다.
댓글3
업데이트 된 답글입니다.
commit
2024.02.20
업데이트 된 답글입니다.
TestGun 작성자
2024.02.21
업데이트 된 답글입니다.
TestGun 작성자
2024.02.21
궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!