My WebAPI 2アプリケーションには、アクセストークンをチェックするカスタム認証フィルタがあります。トークンが存在し、APIに属性がある場合は、そのトークンにマップするユーザーが存在するかどうかを確認します。プリンシパル/ユーザコンテキストをユーザオブジェクトに設定
APIの性質上、ほとんどのメソッドは特定のユーザーのコンテキストで実行されます(つまり、ユーザーのプロフィールを更新するための「POST API /プロファイル」)。これを行うには、アクセストークンから取得するターゲットユーザーに関する情報が必要です。
if(myDBContext.MyUsers.Count(x => x.TheAccessToken == clientProvidedToken)){
IPrincipal principal = new GenericPrincipal(new GenericIdentity(myAccessToken), new string[] { "myRole" });
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
return true;
}
[現在の実装では、タイプAuthorizeAttributeの属性の中で起こる]これは正常に動作し、私は、メソッドに第2のルックアップを行うためにアクセストークンを使用することができますよ。 しかし私はすでに認証時間で検索しているので、別のDBコールを無駄にしたくありません。
[私がしたいのですが(ただし、明らかに動作しません)何]
MyUser user = myDBContext.MyUsers.FirstOrDefault(x => x.TheAccessToken == clientProvidedToken);
if(user != null){
// Set *SOME* property to the User object, such that it can be
// access in the body of my controller method
// (e.g. /api/profile uses this object to load data)
HttpContext.Current.User = user;
return true;
}
なぜ私はGenericPrincipalを拡張するとは思わなかったのですか?うまくいった!ありがとうございました! – ShaneC