-1
-u 'トークン'パラメータをカールから後続のウェブ呼び出しに渡すための解決策を見つけるのが難しいです。私はHttpClient、WebClient、Flurlを試しましたが、ポストログイン要求をトークンで正しくフォーマットする方法を解読することはできません。誰かがカールの-uに相当するいくつかのC#の例を私に指摘できますか?C#でcurl -u相当?
このバラクーダロードバランサからAPI DOC
ログイン要求
$ curl -X POST \ -H "Content-Type:application/json" \ -d '{"username": "admin", "password": "admin"}' \ http://10.11.19.104:8000/restapi/v2/login
Response:
{"token":"eyJldsI6IjE0NjIzODQ0MTgiLCJwYXNzd29yZCI6ImUzZDFhY2IwNzlkZmQxMDZmMmRhODEwZGRm
MzFiNGI3IiwidXNlciI6InNlYW4ifQ=="}
ログアウト要求
$ curl -u 'J3sidXNlcm5hbWUiOiJ5Jw=\n:' \ -X DELETE \ http://10.11.19.104:8000/restapi/v2/logout
Response: { "msg": "Success" }
はここでトークンを使用する私の試みです:
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Web.Helpers;
using Newtonsoft.Json;
using NLog;
namespace Barracuda
{
class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public static String BaseUrl = "https://load.balancer.ip";
public static String RestApi = "restapi/v2/";
public static String LoginEndpoint = RestApi + "login";
public static String LogoutEndpoint = RestApi + "logout";
public static String VirtualUserGroups = RestApi + "virtual_service_groups";
public class LoginCreds
{
public string username { get; set; }
public string password { get; set; }
}
public class LogoutMessage
{
public string msg { get; set; }
}
public class AuthToken
{
public string token { get; set; }
}
static void Main(string[] args)
{
//login
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
var request = (HttpWebRequest) WebRequest.Create(BaseUrl + "/" + LoginEndpoint);
request.ContentType = "application/json";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
var creds = new LoginCreds {username = "myUsername", password = "myPassword"};
string json = JsonConvert.SerializeObject(creds);
streamWriter.Write(json);
}
var response = (HttpWebResponse) request.GetResponse();
AuthToken myToken;
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
myToken = JsonConvert.DeserializeObject<AuthToken>(streamReader.ReadToEnd());
logger.Log(LogLevel.Debug, myToken.token);
}
//logout
request = (HttpWebRequest) WebRequest.Create(BaseUrl + "/" + LogoutEndpoint);
request.ContentType = "application/json";
request.Method = "DELETE";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(myToken.token));
response = (HttpWebResponse) request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var logoutMessage = JsonConvert.DeserializeObject<LogoutMessage>(streamReader.ReadToEnd());
logger.Log(LogLevel.Debug, logoutMessage.msg);
}
}
}
}
これは一般的な認証方式ですか?私たちが知らないランダムなWebサービスとどのようにやりとりする必要があるのか、どのようにして知っていますか? – nvoigt
詳細を追加しました。おそらくこれを行う簡単な方法があります。 – Sean