Thinktecture の甘い Indentity Model ライブラリを使用しています。私は高くも低くも見えましたが、おそらくばかげた質問をしようとしています。基本的に、ASP.net Web API 機能を追加する Web フォーム アプリケーションがあります。Identity コード サンプルをインストールし、セッション トークンで動作させるために必要だと思われるものを集めました。トークンを取得して、今後の呼び出しで送り返すことはできますが、API コントローラーではユーザー オブジェクトが設定されていないようです。提供された場合、フレームワークがトークンを照会し、トークン データに基づいてプリンシパルを自動的に設定し、プリンシパルを認証済みとしてマークすると想定していましたか? これは無効な仮定であり、自分で設定しなければならないものですか?
基本的に、承認と認証にトークンを使用していますが、追加のビジネス ルールのためにトークン/セッションから UserID を引き出す必要があります。
繰り返しますが、ばかげた質問があれば、遠慮なく私を悩ませてください。推奨事項に影響がある場合は、単体テストを使用してテストしています。
単体テストのコード: 1) トークンを取得し、ビジネス ロジックを使用してユーザーを正常に検証し、トークンを正常に返します。
private string GetToken(string username, string password)
{
Uri _baseAddress = new Uri(Thinktecture.Samples.Constants.WebHostBaseAddress);
var client = new HttpClient { BaseAddress = _baseAddress };
client.SetBasicAuthentication(username, password);
var response = client.GetAsync("token").Result;
response.EnsureSuccessStatusCode();
var tokenResponse = response.Content.ReadAsStringAsync().Result;
var json = JObject.Parse(tokenResponse);
var token = json["access_token"].ToString();
var expiresIn = int.Parse(json["expires_in"].ToString());
var expiration = DateTime.UtcNow.AddSeconds(expiresIn);
return token;
}
2) HTTP ヘルパー メソッド:
private async Task<HttpResponseMessage> Post<T>(string path, T data, string Token)
{
//var handler = new HttpClientHandler {};
//using (var client = new HttpClient(handler))
using (var client = new HttpClient())
{
if (!String.IsNullOrEmpty(Token))
{
client.SetToken("Session", Token);
//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Session", Token);
}
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.BaseAddress = new Uri("http://localhost/");
var response = await client.PostAsJsonAsync(path, data);
response.EnsureSuccessStatusCode(); // Throw on error code.
return response;
}
}
3) 呼び出しコード:
string Token = GetToken("UserName", "Password");
removed proprietry code here....
Task<HttpResponseMessage> result = Post<GetCustomerDetailsRequest>("api/Account/GetCustomerProfile", GetCustomerDetailsRequest, Token);