3 回答
TA贡献1877条经验 获得超6个赞
更改允许匿名
options.Authentication.AllowAnonymous = false;
如果您启用了匿名,并且您没有提示进行身份验证,那么浏览器将不会进行身份验证。即使您确实发送创建,asp.net 也不会获取它们,除非控制器/方法上有 Authenticate 属性,或者,如果您要使用函数路由,则调用 signin。
TA贡献1789条经验 获得超10个赞
如果您不想设置AllowAnonymous为false,则可以尝试context.ChallengeAsync基于 对请求进行身份验证Credential。
这是代码:
app.MapWhen(context => context.Request.Path.Equals("/sensitiveOperation") && context.Request.Method.Equals(HttpMethods.Put), subApp =>
{
subApp.Run(async (context) =>
{
var authService = context.RequestServices.GetRequiredService<IAuthorizationService>();
if (!context.User.Identity.IsAuthenticated)
{
//await context.ChallengeAsync("Windows"); //Option1
//await context.ChallengeAsync(); //Option2
await context.ChallengeAsync(HttpSysDefaults.AuthenticationScheme); //Option3
}
if (context.User.Identity.Name == "admin")
{
await context.Response.WriteAsync("Performing sensitive operation.");
// .. Do Sensitive operation....
}
});
});
请注意,对于这种方式,subApp.Run将运行两次,第一个请求是 UnAuthenticated,它将挑战凭证,第二个请求是 Authenticated 并且context.User.Identity.Name将具有价值。这个过程是后端,这不会反映在powershell.
TA贡献2011条经验 获得超2个赞
我正在使用 .NET Core 3.0,并且在我的自定义中间件中,我能够使用以下代码获取 UserId:
httpContext.User.Identity.IsAuthenticated ? new Guid(httpContext.User.Claims.Where(c => c.Type == ClaimTypes.NameIdentifier).First().Value) : Guid.Empty
- 3 回答
- 0 关注
- 211 浏览
添加回答
举报