【发布时间】:2016-09-08 21:18:41
【问题描述】:
我正在使用 C# 和 Web API 构建一堆 Web 服务。可以从多个 Web 应用程序和多个本机应用程序访问这些服务。该应用程序管理授权域列表和授权应用 ID 列表(用于原生应用)。
我正在寻找一种方法来检测托管 Web 应用程序的域,以便我可以将该域名与我的授权域列表进行比较。到目前为止,我可以在请求上下文中找到的唯一属性是定义客户端/Web 应用程序正在调用的域的属性,这不是我想要的。
例如: 如果一个应用程序托管在 externalapp.com 上,并且正在向 api.myawesomeapi.com 上的我的 api 发出请求,我想知道客户端托管在 externalapp.com 上。但是在查看请求数据时,我发现的唯一信息是说客户端正在“api.myawesomeapi.com”上请求资源。
我希望来自本机应用程序(android、iOS 等)的请求没有客户端域,而来自 Web 应用程序的请求具有客户端域。 (客户域、主机域,无论应该叫什么)。
我查看了 * 上的其他帖子,并找到了使用建议:Request.Headers.Referrer。就我而言,所有网络应用程序都是空的,本机应用程序也是空的。这似乎不是我的选择。
【问题讨论】:
-
您是否知道任何类型的请求信息(如
Referrer标头)都可能被恶意用户轻松(非常)伪造/伪造?我不相信这个限制是安全的,如果不安全,它也没有用。尝试检查您的设计,如果您确实需要保护您的 API,请使用安全且经过测试的协议,例如 OAuth2。 -
我非常清楚这一点。这是我最关心的问题之一。我考虑过 OAuth2,但希望有不同的解决方案。
-
即使值在标头中,客户也可能撒谎(你几乎不应该相信他们发送的任何东西)。我认为您可能确实想要某种可以绑定到客户端的身份验证。
标签: c# api asp.net-web-api cross-domain referrer