C#でアクセストークンの取得に失敗します
下記のようにC#でアクセストークンを取得するプログラムを買いたいのですが「client.UploadValues」の呼び出しで
タイムアウトでエラーになってしまいます。
エラーもタイムアウトということでどこが悪いのかがわかりません。
どなたかご存じの方お教えください。
/// <summary>
/// LINE WORKS サーバーAPIのアクセストークン取得結果のJSONデータ取得用クラス
/// </summary>
class LineWorksAuthenticationResultToken
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
}
public string GetAccessToken(string apiId, string serverId )
{
//JWTトークンの作成=======================================================
string request_jwt = null;
string privateKey = "C:\\private.key";
//privatekeyをRSAとして使用できるように変換
//var pkcs8privatekey = Security.opensslkey.DecodePkcs8PrivateKey(File.ReadAllText(privateKey));
var rsa = Security.opensslkey.DecodePrivateKeyInfo(pkcs8privatekey);
var key = new Microsoft.IdentityModel.Tokens.RsaSecurityKey(rsa);
// トークン操作用のクラスを用意
var handler = new System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();
// 署名情報クラスを生成
var credentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(key, "RS256");
var descriptor = new Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor
{
Issuer = serverId,
SigningCredentials = credentials,
IssuedAt = DateTime.UtcNow,
Expires = (DateTime.UtcNow).AddMinutes(50),
};
// トークンの生成
var token = handler.CreateJwtSecurityToken(descriptor);
// トークンの文字列表現を取得
var tokenString = handler.WriteToken(token);
//アクセストークンの取得=======================================================
//認証URL
string TOKEN_ENDPOINT = @"https://auth.worksmobile.com/b/" + apiId + "/server/token";
var client = new System.Net.WebClient();
client.Encoding = Encoding.UTF8;
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
var content = new System.Collections.Specialized.NameValueCollection();
request_jwt = tokenString;
content["assertion"] = request_jwt;
content["grant_type"] = "urn:ietf:params:oauth:grant-type:jwt-bearer";
//ここでタイムアウトでどうしても失敗してしまう
string response = Encoding.UTF8.GetString(client.UploadValues(TOKEN_ENDPOINT, "POST", content));
var result = JsonConvert.DeserializeObject<LineWorksAuthenticationResultToken>(response);
return result.AccessToken;
//WebRequest request = WebRequest.Create(TOKEN_ENDPOINT);
//var request = new System.Net.WebClient();
}
投稿に新しいコメントが追加されましたら通知を送信します。
コメント1
업데이트 된 답글입니다.
佐藤正宗
ご参考までに。
var client = new RestClient("https://auth.worksmobile.com/b/xxxxxxx/server/token");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
request.AddHeader("Authorization", "Bearer xxxxxxxxxxxxxxxxxxxxxx");
request.AddHeader("Cookie", "LC=en_US; language=en_US");
request.AlwaysMultipartFormData = true;
request.AddParameter("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
request.AddParameter("assertion", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
2021.04.27
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。