最近この質問をして、カスタム認証属性を正常にセットアップしました。
しかし今、私は API 呼び出しに関して別の壁にぶつかっています。これらの呼び出しも、アクション呼び出しと同じ方法で承認する必要があります。System.Web.Http と System.Web.Mvc Authorize 属性に違いがあることを理解しています。したがって、基本的に同じことを行う別の Api 固有の属性を作成しました。ただし、元の属性で行っているように、ユーザー - プリンシパルと ID の設定に問題があります。
私の属性は、リクエストを承認するために Cookie のいくつかの値をチェックするだけです。属性が Cookie を読み取った後、復号化された Cookie 情報をカスタムのプリンシパル/ID セットアップ内に保存していました。私の Api 呼び出しで、ID からこの情報を取得しようとすると、キャストが失敗し、null 値を受け取ります。
これが私が情報を保存する方法です
アピ
HttpContext.Current.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
アクション
filterContext.RequestContext.HttpContext.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
必要な情報を取得する方法は同じだと思いました
(User.principal.Identity as MyIdentity).MyData;
質問
- 本当に 2 つの個別の属性が必要ですか?
- Api 属性の場合、コントローラー内で後で使用するために情報を簡単に保存するにはどうすればよいですか。または基本的に、これらの呼び出しに対してこの方法で実際にアイデンティティを取得/設定することはできませんか?
編集#1
ApiController から Cookie 値に適切にアクセスする方法を見つけました。単に System.Web >_< への参照がありませんでした。これで、問題 2 は解決しました。でも1位は残ってる。