我在我的新asp.net core 2.0 api应用程序中使用JWT Bearer auth,并希望为当前身份添加一些额外的声明.这个额外的信息位于需要查询的另一个api中.我的理解是,索赔转换将是适当的地方.在.net核心1.1中,您在Microsoft.AspNetCore.Authentication nuget包中有IClaimsTransformer接口,但我无法在我的.net核心2.0应用程序中安装此接口.是否有另一种方法来转换asp.net core 2.0中的声明,这是我的用例的正确方法吗?
我想知道是否有人可以为我指明一个方向或一个例子,使我获得完整的代码以得到一个总体思路?
谢谢。
更新: 我在Startup.cs中只有以下代码,并确保launchSettings.json中的windowsAutication为true。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
//.RequireRole(@"Departmental - Information Technology - Development") // Works
.RequireRole(@"*IT.Center of Excellence.Digital Workplace") // Error
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
}
Run Code Online (Sandbox Code Playgroud)
我想我已启用身份验证,并尝试授权指定AD组中的用户可以在全局级别访问该应用程序。
如果我使用注释的RequireRole可以正常工作,但使用未注释的RequireRole则会给我这个错误:Win32Exception:主域和受信任域之间的信任关系失败。
堆栈的第一行显示:System.Security.Principal.NTAccount.TranslateToSids(IdentityReferenceCollection sourceAccounts,在bool someFailed外)
知道为什么吗?
从上面的更新我的理解
似乎在RequireRole中指定的组名称是电子邮件通讯组列表而不是安全组。如果我使用其他一些AD组,则可以正常工作,但会出现以下新错误:
InvalidOperationException:未指定authenticationScheme,也未找到DefaultForbidScheme。
如果我在Startup.cs的ConfigureServices中添加IIS默认authenticationScheme
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Run Code Online (Sandbox Code Playgroud)
它给了我一个HTTP 403页面:该网站拒绝显示此页面
所以这是最终的代码:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Run Code Online (Sandbox Code Playgroud)
如果我理解错误,请纠正我。谢谢。
authorization asp.net-authorization asp.net-core asp.net-core-2.0 asp.net-core-mvc-2.0