私の古い.NET MVCアプリでは、IISでWindows認証を有効にし、匿名を無効にしました。次に、web.config
ファイル私はこれに入れなければなりませんでした:
<authorization>
<allow roles="Domain\MyADGroupToHaveAccess" />
<deny users="*" />
</authorization>
.NET Core 2.0ではこれは機能しません。匿名は正しく拒否されますが、何があってもすべてのユーザーを許可します。
私がこれをすると:
[Authorize(Roles = "Domain\\MyADGroupToHaveAccess")]
私のHomeController
では機能しますが、他の環境で変更する必要があるため、プロジェクトでこの設定をハードコーディングしたくありません。
どうすればweb.config
AD Authorizationを使用しますか?または、ASP.NET Coreでこの設定をハードコーディングしない別の方法はありますか?
appsettings.json
を呼び出せるポリシーにすることで解決しました。このようにして、サーバーにアクセスできる他のユーザーは、グループを自分のグループに編集できます。
Startup.cs
:
services.AddAuthorization(options =>
{
options.AddPolicy("ADRoleOnly", policy => policy.RequireRole(Configuration["SecuritySettings:ADGroup"]));
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
appsettings.json
(または、異なる場合はおそらくappsettings.production.json
):
"SecuritySettings": {
"ADGroup": "YourDomain\\YourADGroup"
}
コントローラーでは、次の属性で装飾できます。
[Authorize(Policy = "ADRoleOnly")]
これが他の人の役に立つことを願っています
私はまだこのポリシーをグローバルに適用する方法を理解する必要があるので、すべてのコントローラーを承認する必要はありません。services.AddMvc
で何とかできると思いますか?
Morten_564834の答えをさらに詳しく説明するために、この問題に対する私たちのアプローチを示します。すべてのコントローラーが継承するベースコントローラーを作成します。
[Authorize(Policy = "AdUser")]
public class FTAControllerBase : Controller
{
private readonly ApplicationDbContext _db;
private readonly ILogHandler _logger;
public FTAControllerBase(ApplicationDbContext DbContext, ILogHandler Logger, IWindowsAccountLinker WinAccountLinker)
{
_db = DbContext;
_logger = Logger;
/// get registered user via authenticated windows user.
//var user = WinAccountLinker.LinkWindowsAccount();
}
}
次に、他のコントローラーで:
public class LettersController : FTAControllerBase
{ ... }
メソッドに対するきめ細かなアクセス許可が必要な場合:
[Authorize("GenerateLetterAdUser")]
[HttpGet]
public IActionResult Generate()
{
return View();
}
Startup.cs:
// add authorization for application users
var section = Configuration.GetSection($"AuthorizedAdUsers");
var roles = section.Get<string[]>();
services.AddAuthorization(options =>
{
options.AddPolicy("AdUser", policy => policy.RequireRole(roles));
});
AppSettings.json:
"AuthorizedAdUsers": [
"domain\\groupname"
],