クライアントIPに基づいてREST APIを保護しようとしています。属性を使用したIPベースの承認ポリシー
は、これらの要求の例でブログアプリケーションを想像してみて:appsettings.jsonで定義されて
/post/list // Everyone should see the posts
/post/create // Only Authors should create a post
/post/update/42 // Only Authors should update a post
/post/delete/42 // Only Admins should delete a post
/comment/42/list // Everyone should see a post's comments
/comment/42/create // Everyone should create a comment
/comment/42/delete/1337 // Only Admins should delete a comment
IPのホワイトリスト:ここで
"IpSecurity": {
"Author": "123.456.789.43,123.456.789.44",
"Admin": "123.456.789.42"
}
は私が好き応じRequireRole
属性を持つアクションの例があります実装する:
[HttpGet("post/list")]
public List<Post> List()
// ...
[RequireRole("Author")]
[HttpGet("post/create")]
public StandardResponse Create([FromBody]Post post)
// ...
[RequireRole("Admin")]
[HttpGet("post/delete/{id}")]
public StandardResponse Delete(int id)
// ...
はスタートアップ
var IpSecurity = Configuration.GetSection("IpSecurity");
services.Configure<IpSecurityConfig>(IpSecurity);
からの注射定義され、それは良いアイデアのように聞こえるでしょうか?
私はカスタム認証ポリシー、ミドルウェア、またはそのフィルタを行う必要がありますか?
RequireRole
属性を実装するにはどうすればよいですか?
Thisは、IPホワイトリストを実装する方法のアイデアを与えるが、ミドルウェアは、文脈アクションへのアクセス権を持っていないので、私は私の要件を定義するための属性を使用することはできません。私がお勧めしたい...
を彼らがスプーフィングすることができるように、との要求が拒否される前に、あなたのスタックにそれは非常深い作る - あなたはIPベースの認証の意味について考えてきたと仮定すると、
私はあなたに紛らわしい '役割'の用語について同意します。私はあなたの解決策を試みます。 –
コントローラアクションで定義された '[Authorize(Policy = ...)]'を試しましたが、空の 'AddIpAddressClaims()'を使ってみました。許可されていない返答を返してはいけませんか? –
私は 'ConfigureServices()'で 'AddMvcCore()'を使っているので、私は 'AddAuthorization()'をしなければなりませんでした。しかし、私は最終的に、[カスタムポリシーベースの承認](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies)を使用しました。クレームベースの繰り返しがあまりにも多いからです。また、私は認証フレームワークを必要としませんでした –