使用 openIdDict 我们是否必须在 Startup.cs 中有“UseIdentity()”?

迈克·贝卡蒂

我们有一个使用 OpenIdDict 进行身份验证的 asp.net 核心 Web 应用程序。我注意到我未经身份验证的 Ajax 调用在响应正文中返回 200 和我们的登录表单。从我读到的这是预期的行为,因为 OpenIdDict 处理请求,然后 ASP.NET 核心处理它并返回 200。ASP.NET 核心正在处理它,因为在 Startup.cs 中调用了“UseIdentity()”。我在 OpenIdDict 中看到的所有示例都调用了“UseIdentity”。我有2个问题。

  1. 如果我不想让 ASP.NET 核心处理我的请求,我可以删除“UseIdentity()”吗?我试过了,现在我得到了 401 而不是 200。这样做有什么害处,或者 OpenIdDict 需要“UseIdentity()”吗?
  2. 如果我不想失去重定向登录 UI 视图的能力,这是实现这一点以覆盖 OnRedirectToLogin 的最佳/最简单/最安全的方法吗?下面的代码示例:

options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents { OnRedirectToLogin = ctx => { if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == (int) HttpStatusCode.OK) { ctx.Response.StatusCode = (int) HttpStatusCode.Unauthorized; } else { ctx.Response.Redirect(ctx.RedirectUri); } return Task.FromResult(0); } };

代码示例来源:https : //devblog.dymel.pl/2016/07/07/return-401-unauthorized-from-asp-net-core-api/

在此处进一步讨论此问题:https : //github.com/aspnet/Security/issues/804

凯文木屋

OpenIdDict 是否需要“UseIdentity()”?

不,在引擎盖下注册的 cookie 中间件app.UseIdentity()不被 OpenIddict 直接使用,因此调用此方法不需要 OpenIddict 正常工作。

也就是说,如果您使用依赖 cookie 身份验证的 ASP.NET Core Identity 功能(几乎是AccountController/ 中的所有内容ManageController),那么是的,您必须使用app.UseIdentity().

我在 OpenIdDict 中看到的所有示例都调用了“UseIdentity”

对于不使用 的示例app.UseIdentity(),您可以查看官方密码流示例或阅读这篇博客文章,其中展示了如何在没有 ASP.NET Core Identity 的情况下使用 OpenIddict。

如果我不想失去重定向登录 UI 视图的能力,这是实现这一点以覆盖 OnRedirectToLogin 的最佳/最简单/最安全的方法吗?

这绝对有效,但我个人选择了一个更安全的选项,即使用管道分支来排除app.UseIdentity(). 这不仅可以防止 Identity 劫持 API 返回的 401 响应,还可以避免 XSRF 攻击,因为HttpContext.User无法使用从 cookie 中提取的身份填充:

app.UseWhen(context => !context.Request.Path.StartsWithSegments("/api"), branch =>
{
    branch.UseIdentity();
});

有关完整示例,请参阅https://github.com/openiddict/openiddict-samples/blob/master/samples/CodeFlow/AuthorizationServer/Startup.cs#L141-L158

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如果我使用OWIN Startup.cs类并将所有配置移到那里,是否需要Global.asax.cs文件?

来自分类Dev

App_Start中缺少WebApiConfig.cs。我可以使用Startup.cs吗?

来自分类Dev

我的前端是否需要Startup.cs?

来自分类Dev

我们是否必须在使用 CNTK C++ 库进行评估之前转换输入?

来自分类Dev

是否可以同时使用OpenIddict和LDAP?

来自分类Dev

我们是否*必须*使用 data: URIs (readAsDataURL) 在 JavaScript 中使用带有 <img /> 的 File 对象?

来自分类Dev

我们是否必须使用Cognito进行Dynamodb访问?

来自分类Dev

我们必须在装饰器的包装函数中使用函数值吗?

来自分类Dev

为什么我们必须在Java脚本(Razor)中对C#代码使用引号

来自分类Dev

我们必须在SQL Server 2008中对½符号使用的排序规则是什么?

来自分类Dev

我们是否必须在SQL Server托管实例连接字符串中使用故障转移组服务器名称或主服务器名称

来自分类Dev

在Startup.cs中使用DI解决服务

来自分类Dev

如何在startup.cs的Configure方法中使用ConfigurationBinder

来自分类Dev

我遇到了一些 C++ 代码。为什么我们必须在块中使用 *this 而不是 this?

来自分类Dev

我们是否使用我们自己的数据正确更新了现有的gemsim模型?

来自分类Dev

startup.cs是否只能执行一次?

来自分类Dev

startup.cs是否只能执行一次?

来自分类Dev

使用OpenIdDict 3.0跳过AllowAnonymous

来自分类Dev

实现状态更新的流程,我们是否必须使用 SendTransaction

来自分类Dev

我们是否有可能基于Laravel中的参数(获取参数)使用特定的Controller动作?

来自分类Dev

如果我们使用小文件,HDFS中是否有任何内存丢失?

来自分类Dev

是否有必要,如果我们使用try-与资源密切资源

来自分类Dev

我们想使用onMouseOver事件而不是OnClick事件。是否有可能?

来自分类Dev

我们是否应该对网站中的所有图像使用最大宽度100%?

来自分类Dev

即使我们正在使用它,预定义类的对象是否有效?

来自分类Dev

当接口的方法没有任何实现我们必须每次都覆盖它们时,使用接口的目的是什么?

来自分类Dev

是否必须使用特定于平台的语言编写用于桌面的Flutter插件(例如Windows,我们使用C ++,而Mac,我们使用Swift)

来自分类Dev

我是否必须在源代码管理中包含class.feature.cs文件?

来自分类Dev

如果我们已经在使用捕获所有异常处理程序,我们是否从添加空检查中获得任何好处?

Related 相关文章

  1. 1

    如果我使用OWIN Startup.cs类并将所有配置移到那里,是否需要Global.asax.cs文件?

  2. 2

    App_Start中缺少WebApiConfig.cs。我可以使用Startup.cs吗?

  3. 3

    我的前端是否需要Startup.cs?

  4. 4

    我们是否必须在使用 CNTK C++ 库进行评估之前转换输入?

  5. 5

    是否可以同时使用OpenIddict和LDAP?

  6. 6

    我们是否*必须*使用 data: URIs (readAsDataURL) 在 JavaScript 中使用带有 <img /> 的 File 对象?

  7. 7

    我们是否必须使用Cognito进行Dynamodb访问?

  8. 8

    我们必须在装饰器的包装函数中使用函数值吗?

  9. 9

    为什么我们必须在Java脚本(Razor)中对C#代码使用引号

  10. 10

    我们必须在SQL Server 2008中对½符号使用的排序规则是什么?

  11. 11

    我们是否必须在SQL Server托管实例连接字符串中使用故障转移组服务器名称或主服务器名称

  12. 12

    在Startup.cs中使用DI解决服务

  13. 13

    如何在startup.cs的Configure方法中使用ConfigurationBinder

  14. 14

    我遇到了一些 C++ 代码。为什么我们必须在块中使用 *this 而不是 this?

  15. 15

    我们是否使用我们自己的数据正确更新了现有的gemsim模型?

  16. 16

    startup.cs是否只能执行一次?

  17. 17

    startup.cs是否只能执行一次?

  18. 18

    使用OpenIdDict 3.0跳过AllowAnonymous

  19. 19

    实现状态更新的流程,我们是否必须使用 SendTransaction

  20. 20

    我们是否有可能基于Laravel中的参数(获取参数)使用特定的Controller动作?

  21. 21

    如果我们使用小文件,HDFS中是否有任何内存丢失?

  22. 22

    是否有必要,如果我们使用try-与资源密切资源

  23. 23

    我们想使用onMouseOver事件而不是OnClick事件。是否有可能?

  24. 24

    我们是否应该对网站中的所有图像使用最大宽度100%?

  25. 25

    即使我们正在使用它,预定义类的对象是否有效?

  26. 26

    当接口的方法没有任何实现我们必须每次都覆盖它们时,使用接口的目的是什么?

  27. 27

    是否必须使用特定于平台的语言编写用于桌面的Flutter插件(例如Windows,我们使用C ++,而Mac,我们使用Swift)

  28. 28

    我是否必须在源代码管理中包含class.feature.cs文件?

  29. 29

    如果我们已经在使用捕获所有异常处理程序,我们是否从添加空检查中获得任何好处?

热门标签

归档