Ownin Cookie 認証を持つ Mvc 5 クライアントがあります。また、Owin Bearer トークンで保護された Web Api もあります (トークン エンドポイントを作成する VS2013 Web Api テンプレートを使用しました)。
さて、私の Mvc 5 クライアントは私の WebApi を使用する必要があります。ベアラー トークンを取得するメソッドを作成しました。
internal async Task<string> GetBearerToken(string siteUrl, string Username, string Password)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(siteUrl);
client.DefaultRequestHeaders.Accept.Clear();
HttpContent requestContent = new StringContent("grant_type=password&username=" + Username + "&password=" + Password, Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage responseMessage = await client.PostAsync("Token", requestContent);
if (responseMessage.IsSuccessStatusCode)
{
TokenResponseModel response = await responseMessage.Content.ReadAsAsync<TokenResponseModel>();
return response.AccessToken;
}
return "";
}
そして、私の Mvc アクションでは、次のように呼び出しました。
public async Task<ActionResult> Index()
{
var token = await GetBearerToken("http://localhost:6144/", "teste", "123456");
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer "+ token);
var response = await client.GetAsync("http://localhost:6144/api/values");
if (response.IsSuccessStatusCode)
{
var data = response.Content.ReadAsAsync<IEnumerable<string>>();
return Json(data.Result, JsonRequestBehavior.AllowGet);
}
}
}
それはすべて正常に機能します...しかし、私はすべてのアクションでWeb Apiを使用する必要があります...そのトークンを保持するにはどうすればよいですか(リクエストごとに新しいトークンを取得するにもかかわらず)、期限切れかどうかを確認するにはどうすればよいですか...可能ですか?それを認証Cookieと一緒に保持するにはどうすればよいですか? そのシナリオに対処するためのベストプラクティスはありますか?
ありがとう