问题标签 [asp.net-web-api2]

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.

0 投票
2 回答
920 浏览

c# - ASP.NET WebApi2/MVC5 cookie 身份验证

我正在尝试实现 cookie 身份验证。这是我的登录操作:

身份验证是:

但是 User.Identity.Name 仍然是空的。我做错了什么?我怎样才能获得经过身份验证的用户?

这是我的 Startup.Auth:

0 投票
1 回答
7677 浏览

asp.net-web-api - 单元测试 WebApi2 传递标头值

我正在使用 WebApi2 开发一个项目。在我的测试项目中,我使用的是 Moq 和 XUnit。

到目前为止,测试一个 api 已经非常简单地做一个 GET 之类的

现在我正在处理一些复杂的事情,我需要从请求标头中访问值。

我通过扩展 IHttpActionResult 创建了自己的 Ok() 结果

这允许我有一个小助手从请求中读取标头值。

我的意思是如何使用虚拟请求设置 Moq?

我花了最后一个小时左右寻找一个允许我使用 webapi 执行此操作的示例,但是我似乎找不到任何东西。

到目前为止.....我很确定它对api是错误的,但我有

我不确定接下来我需要做什么,因为我过去不需要设置模拟 HttpRequestBase。

谁能推荐一篇好文章或指出我正确的方向?

谢谢!!!

0 投票
1 回答
244 浏览

asp.net - ASP.NET 身份声明和登录

我正在尝试了解新的身份验证。谁能告诉我,我为什么要使用 UserClaims 和 UserLogins?(我不使用任何外部身份验证)。我应该在哪里使用它?

如何在没有声明的情况下登录?目前我正在登录声明:

0 投票
2 回答
79 浏览

security - 保护您的 Web API 操作免受经过身份验证的用户的影响

我有这种情况:

1 个用户 - N 个项目

1 个项目 - N 个任务

1 个项目 - N 评论

当用户通过身份验证时,他可以执行以下操作:

删除他的任务,但是当他在做 /api/tasks/2 时,他删除了其他人的任务

得到他的评论,但是当他在做 /api/comments/2 时,他阅读了其他人的任务

如何拦截用户操作(操作 URI)并以一般方式检查是否允许用户删除此任务。

Task 和 Comment 对 userId 一无所知,那么如何禁止用户删除其他人的数据呢?

我不是在谈论用户和角色场景。我说的是操纵 URI 以删除属于其他人的资源。

更新以回答@A Khudairy 的问题

1)电子邮件+密码发送到api。

2) Api 使用用户令牌返回用户。

3)然后随着每个请求将令牌发送到api,(以便我知道哪个用户在做什么并在后端处理它。)

0 投票
1 回答
27685 浏览

asp.net-mvc - 使用 OWIN 身份从多个 API 客户端注册 Web API 2 外部登录

我想要以下架构(我已经为这个示例编造了产品名称):

在一台服务器上运行的 Web API 2 应用程序 http://api.prettypictures.com

在另一台服务器上运行的 MVC 5 客户端应用程序 http://www.webpics.com

我希望www.webpics.com客户端应用程序使用 Pretty Pictures API 来:

  • 使用用户名和密码注册新帐户
  • 在 Facebook/Google/Twitter/Microsoft 注册新帐户
  • 登录
  • 检索图片

除了在 Facebook、Google 等注册外部帐户外,上述所有工作都有效。

我无法制定正确的流程来从 API 的单独客户端用户创建外部帐户。

我研究了身份验证流程中可用的大多数文档,如下所示: 在此处输入图像描述

我已经阅读了几乎所有关于 OWIN 中新身份模型的内容。

我已经检查了 Visual Studio 2013 中的 SPA 模板。它演示了如何完成我需要的大部分工作,但前提是客户端和 API 位于同一主机上;如果我希望多个客户端访问我的 API 并能够让用户通过 Google 等进行注册。它不起作用,据我所知 OWIN 身份验证流程中断。

这是到目前为止的流程:

  • 用户浏览到www.webpics.com/Login
  • www.webpics.com调用api.prettypictures.com/Account/ExternalLogins(将returnUrl设置为返回到 www.webpics.com 的回调并向用户显示结果链接
  • 用户点击“谷歌”
  • 浏览器使用提供者的名称等重定向到api.prettypictures.com/Account/ExternalLogin 。
  • API 的ExternalLogin操作实例化了对google.com的挑战
  • 浏览器被重定向到google.com
  • 用户输入他们的用户名和密码(如果他们尚未登录google.com
  • google.com现在提供安全许可:“api.prettypictures.com”想访问您的电子邮件地址、姓名、妻子、孩子等。可以吗?
  • 用户单击“是”并返回api.prettypictures.com/Account/ExternalLogin并使用 Google 设置的 cookie。

这就是我卡住的地方。接下来应该发生的事情是以某种方式通知客户端应用程序,用户已成功通过google.com进行身份验证,并获得一次性访问代码,以便稍后交换访问令牌。如有必要,客户端应用程序应有机会提示用户输入用户名以与他们的google.com登录相关联。

我不知道如何促进这一点。

事实上,此时浏览器在Google 回调后最终位于api.prettypictures.com/Account/ExternalLogin端点。API 已为 Google 登录,但客户端不知道如何处理。我应该把那个 cookie 传回www.webpics.com吗?

在 SPA 应用程序中,它是通过 AJAX 完成的,google.com将返回一个令牌作为 URL 片段,这一切都很好,因为它都位于一个域上。但这在很大程度上违背了拥有多个客户端可以充分使用的“API”的意义。

帮助!

0 投票
2 回答
595 浏览

asp.net-web-api - 在 AuthorizeFilter 中获取 api 控制器构造函数值

当用户通过身份验证时,我想防止他更新/删除/读取从其他帐户创建的数据......通过告诉他您没有权限 403!

获取 ISchoolyearService 实例以调用其 HasUserPermission() 方法的最佳方法是什么?

我知道我可以在这里新建 SchoolyearService ,但这会完全破坏在我的应用程序中使用 IoContainer 的原因。

0 投票
2 回答
806 浏览

asp.net-web-api - 将临时数据从 MyAuthenticationHandler 传递到 Web API 中的 MyAuthorizationFilterAttribute

当我的身份验证处理程序成功通过(userId 取自解密的令牌)时,我想将 userId 添加到当前请求对象的某处。

稍后在管道中,当用户通过身份验证时,授权被执行,在这里我再次需要 userId,因为我必须禁止经过身份验证的用户操纵来自具有特定 userId 的其他用户的数据。

暂时保存userId的最佳方法是什么?我应该滥用 request.headers 来添加 userId 吗?

0 投票
2 回答
1785 浏览

asp.net - 击中时找不到asp.net web api 2 url路由属性

我正在使用带有 Web API 2 的 asp.net MVC 5。我正在测试新的属性路由,这看起来很简单。我关注了 msdn 介绍性链接,但仍然无法进行非常简单的设置。

在 API 配置文件中:

在 api 控制器中:

在我看来,我正在通过 ajax 调用路由。在 chrome 开发者工具中,它试图走这条路:

我收到 404 响应。

我在哪里弄乱了这里的语法?我有这样的ajax调用:

apiBaseUrl 是 'api/recruiting'

0 投票
1 回答
334 浏览

rest - 在 asp.net MVC 中的 web api 中的授权

我是 ASP.NET 的新手,休息...

我只是在制作一个 web api2 我的 REST 服务器已准备就绪,客户端也已准备就绪。

API 只能由具有用户名和密码的有效用户访问。因此需要检查有效用户,所以我尝试通过以下方式访问用户:

在那个调用它访问下面的方法:

但抛出错误。看来这不是这样的方法。请你能帮我推荐一个好的教程或解决这个问题......这将非常有帮助。

0 投票
1 回答
3570 浏览

c# - 生成和流式传输 Zip 存档,无需将其存储在文件系统中或先读入内存

如何异步获取多个现有流(来自 db),将它们添加到 zip 存档流并在 asp.net web api 2 中返回?

与其他“重复”问题的主要区别是如何以流方式执行此操作,而无需先将其写入临时文件或将其完全缓冲在内存中。