问题标签 [asp.net-core-authenticationhandler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 单元测试自定义 AuthenticationHandler 中间件
您如何对继承自的自定义中间件进行单元测试AuthenticationHandler<AuthenticationSchemeOptions>
?
我从它继承的自定义类用于基本身份验证。
authentication - 将自定义 AuthenticationHandler 添加到外部登录提供程序列表
我正在使用 ASP.NET Core 3.1,并且配置了多个外部登录提供程序:
我想创建一个自定义AuthenticationProvider
,而不是重定向到另一个网站,而是要求该网站的“API 密钥”并将其视为访问令牌。(有问题的网站不支持任何版本的 OAuth。)
在实际连接它之前,我想测试一下我是否可以得到一个自定义的AuthenticationProvider
工作,所以我找到了一个实现 HTTP Basic 身份验证的:
我将此添加到 Startup.cs:
问题是该HandleAuthenticateAsync
方法永远不会被调用。我发现这个问题的其他解决方案通常说您需要将其设为“默认”身份验证方案,但我不希望这干扰其他外部登录提供程序的设置方式。
有没有一种方法可以在不更改默认身份验证方案或向我的控制器或操作添加其他属性的情况下使其正常工作?
authentication - 如何将多个身份验证模式合并为一个(自定义身份验证)
我在我的 .NET Core API 中使用添加多个 Jwt 承载进行了多重身份验证,假设我有Schema1
,Schema2
并且Schema3
.
我也在使用Ocelot来管理请求。在每个路由的 Ocelot 配置中,我可以声明一个且只有一个身份验证类型(模式名称)。但是在某些情况下,我需要为每个路由提供多个身份验证支持。(我需要使用 或 中的任何一个来验证请求Schema1
)。Schema2
Schema3
但是由于 Ocelot 只是让我添加一个模式名称,因此我必须将这 3 个模式合并为 1 个模式。
所以基本问题是:我如何定义一个身份验证模式(SchemaX
),它通过Schema1
orSchema2
或 or进行身份验证Schema3
?任何想法?
c# - AuthorizationHandler 和 Cookie 身份验证不能很好地结合在一起
我正在使用简单的cookie 身份验证( .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie
) 并且默认情况下需要经过身份验证的用户,因此请使用:
这工作正常:如预期导航到未经身份验证的 URL 重定向到我的登录页面。
我现在在AuthorizationHandler
下面添加了适用于用户角色的自定义。
这也有效,但是它似乎覆盖了默认的 cookie 身份验证行为,即如果我没有登录并导航到用我的处理程序装饰的控制器,[Authorize(Policy = "DemoPolicy")]
而不是被重定向到登录页面,我被调用(HandleRequirementAsync()
并且当前失败context.User
)null
.
有没有办法让这些东西一起玩?我可以更改我的AuthorizationHandler
,以便它识别出没有经过身份验证的用户并重定向到我的登录页面吗?
授权处理程序:
这使用了一个简单的要求
我创建了一个策略:
并将其应用于控制器:
identityserver4 - IdentityServer4:将过期日期设置为“idsrv.session”cookie
我的 Angular 应用程序的静默刷新机制出现问题,因为身份服务器无法正确设置 cookie 过期时间。
成功登录后,将为身份服务器的域设置以下 cookie:
正如您在图片中看到的,“idsrv.session”cookie 具有到期“会话”。在我的旧 IdentityServer3 中,此 cookie 具有正确的到期日期,并且一切正常。
谁能帮我解决这个问题。我需要一种方法来为“idsrv.session”cookie 设置过期日期。
以下是我为实现目标而添加的当前配置/语句:
但此设置对“idsrv.session”cookie 没有影响。
我使用 .net core 3.1 和 IdentityServer4 4.0.4。
谢谢!!
解决方案:
就我而言,以下语句对我有帮助,即用户不会在 30 分钟后注销。过期“idsrv.session”cookie 虽然仍设置为会话,但在 30 分钟后不会删除。
c# - 如何在自定义 AuthenticationHandler 中自定义错误代码
有一个自定义的 AuthenticationHandler 命名CustomAuthenticationHandler
,默认错误代码是 401。但是我必须在不同的条件下使用不同的错误代码和错误消息来响应。
如果请求在某些情况下应该响应 403 并且当前的解决方案如下所示:
http响应的错误代码是403,这是预期的,但是reqeust仍然会遇到next()
并且会抛出错误:
之后如何停止中间件流await response.WriteAsync("test");
?
c# - 带有登录授权提示的 ASP.NET Core API
我们在 C#/ASPNet Core 3.1 API 的一个端点上使用 Windows 身份验证。它的配置如下:
启动.ConfigureServices():
启动。配置():
并且我们需要身份验证的端点在控制器的 Post 方法上具有 [Authorize] 属性:
在 Chrome 中,系统会提示我输入凭据,然后允许在后续请求中使用端点(即使我取消了提示)。
如何防止提示?
.net-core - 在未授权用户的自定义身份验证中显示 AuthenticateResult.Fail("Invalid Token Used for Authorisation" )
这是自定义身份验证的类,但它不会打印错误令牌密钥的消息(令牌密钥是每个用户的唯一字符串)=>AuthenticateResult.Fail("Invalid Token Used for Authorisation") 它只是在邮递员中显示未经授权的 401 状态代码。
var valtoken = auth.getTokenDetails(token); 如果具有指定令牌的用户有权访问控制器的 get 方法,则该方法返回用户详细信息,否则返回 null。因此,对于空结果,我想返回未经授权的 401 状态代码以及获取 api 调用的自定义消息