RestSharpとWEB APIサービスを使用するWPFクライアントがあります。次のようにHttpBasicAuthenticator
を使用しようとしています。
RestRequest login = new RestRequest("/api/users/login", Method.POST);
var authenticator = new HttpBasicAuthenticator("admin","22");
authenticator.Authenticate(Client, login);
IRestResponse response = Client.Execute(login);
POSTリクエストは次のようになります。
POST http://localhost/api/users/login HTTP/1.1
Authorization: Basic YWRtaW46MjI=
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/105.1.0.0
Host: dellnote:810
Content-Length: 0
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Authorization: Basic YWRtaW46MjI=
サーバー側で?このヘッダーからユーザー名とパスワードを取得しますか?セキュリティトークンに基づく単純な認証を取得する必要がありますが、このプロセスのすべての側面を説明する例を見つけることができません。誰かがクライアント側とサーバー側を含む(そしてRestSharpを使用する)完全な例を教えてくれますか。
new SimpleAuthenticator("username", username, "password", password)
did [〜#〜] not [〜#〜]一緒に働いてください。
ただし、次のように機能しました。
var client = new RestClient("http://example.com");
client.Authenticator = new HttpBasicAuthenticator(userName, password);
var request = new RestRequest("resource", Method.GET);
client.Execute(request);
RestSharpドキュメントから:
var client = new RestClient("http://example.com");
client.Authenticator = new SimpleAuthenticator("username", "foo", "password", "bar");
var request = new RestRequest("resource", Method.GET);
client.Execute(request);
このリクエスト用に生成されるURLは http://example.com/resource?username=foo&password=bar になります
したがって、他のパラメーターと同じようにパスワードを取得します(ただし、セキュリティ上の理由から、POST method、次にGETを使用することをお勧めします)。
クッキーに関しては、これをチェックしてください: https://msdn.Microsoft.com/en-us/library/system.windows.application.setcookie.aspx
https://msdn.Microsoft.com/en-us/library/system.windows.application.getcookie.aspx
それが役に立てば幸い
または、認証ヘッダー値(サーバー側)の取得に関する最初の質問に ヘッダーから基本認証資格情報を取得するにはどうすればよいですか? :
private UserLogin GetUserLoginCredentials()
{
HttpContext httpContext = HttpContext.Current;
UserLogin userLogin;
string authHeader = httpContext.Request.Headers["Authorization"];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
Encoding encoding = Encoding.GetEncoding("iso-8859-1");
string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));
int seperatorIndex = usernamePassword.IndexOf(':');
userLogin = new UserLogin()
{
Username = usernamePassword.Substring(0, seperatorIndex),
Password = usernamePassword.Substring(seperatorIndex + 1)
};
}
else
{
//Handle what happens if that isn't the case
throw new Exception("The authorization header is either empty or isn't Basic.");
}
return userLogin;
}
このメソッドの使用法は次のとおりです。
UserLogin userLogin = GetUserLoginCredentials();
以下もご覧ください: A-WebAPI-Basic-Authentication-Authorization-Filter
トークンを返すことに関する2番目の質問(サーバー側)の代替回答:
var httpResponseMessage = Request.CreateResponse();
TokenResponse tokenResponse;
bool wasAbleToGetAccesToken = _identityServerHelper.TryGetAccessToken(userLogin.Username, userLogin.Password,
platform, out tokenResponse);
httpResponseMessage.StatusCode = wasAbleToGetAccesToken ? HttpStatusCode.OK : HttpStatusCode.Unauthorized;
httpResponseMessage.Content = new StringContent(JsonConvert.SerializeObject(tokenResponse),
System.Text.Encoding.UTF8, "application/json");
return httpResponseMessage;