【发布时间】:2019-06-26 18:27:24
【问题描述】:
在服务器上,有没有办法区分内部和外部 REST API 请求?
为什么?
我想区分这两个来源的原因是,根据受访者的建议,我可能想要返回不同的数据集,具体取决于谁试图提出请求。
总结
我对内部的定义可能不正确。在这种情况下,“内部”是指来自与处理请求的页面相同的域的 XHTTP 请求发出的请求。
外部调用可能是用户从另一个域创建 Curl 请求。
例如:
http.service.ts
内部角度 6 请求
fetchLogin(formData: any): Observable<any> {
let req = null;
let headers = null;
headers = {
reportProgress: false,
headers: new HttpHeaders({
'email': formData['email'],
'password': formData['password']
})
};
req = new HttpRequest('POST', this.restApiUrl + this.restApiUrlEndpoint + '/oauth/', '', headers);
return this.http.request(req)
.map( (data) => {
return 'body' in data ? data['body'] : null;
})
.pipe(
catchError(this.handleError)
);
}
template.cfm
外部冷融合请求
<cfset httpUrl = request.restApiUrl & request.restApiUrlEndpoint & "/oauth/">
<cfhttp url="#httpUrl#" method="post" result="result" timeout="30">
<cfhttpparam type="header" name="email" value="foo@bar.com" />
<cfhttpparam type="header" name="password" value="foo" />
</cfhttp>
请理解我已经简化了这两个代码 sn-ps 以保持清晰。
当请求到达服务器时,我如何知道哪个请求是通过 XHTTP 来的,哪个是通过 CFHTTP [Curl] 发送的?
我正在使用 Taffy.io REST API 框架,所以这里有一个简化的方法,在“资源”CFC 中,我可能会使用它来处理请求:
资源/oauthMember.cfc
<cfcomponent extends="taffy.core.resource" taffy_uri="/oauth">
<cffunction name="post">
<cfset var local = StructNew()>
<cfset local.data['email'] = "">
<cfset local.data['password'] = "">
<cfset local.requestBody = getHttpRequestData().headers>
<cftry>
<cfset local.data['email'] = Trim(local.requestBody['email'])>
<cfset local.data['password'] = Trim(local.requestBody['password'])>
<cfcatch>
</cfcatch>
</cftry>
...processing code
<cfreturn representationOf(local.data) />
</cffunction>
</cfcomponent>
向其中一个调用添加额外的标头是不可行的,因为这很容易被欺骗。
有什么想法吗?
环境
Windows 2008R2 露西 4.5 IIS7+
【问题讨论】:
-
您能否提供一些上下文 - 为什么需要区分这一点?
-
@jonrsharpe 我已将我的推理添加到问题中。如果这种推理有意义,请您删除否决票。谢谢...
-
“我可以” - 嗯,你呢?如果没有,YAGNI。如果你这样做,有什么不同?这实际上是否应该取决于请求是否是“内部”的,而不是您可以区分的任何其他内容?
-
@jonrsharpe “我可能”取决于我从受访者那里得到的建议是否可行。这就是为什么我首先提出这个问题的部分原因......
-
不,端点不应该根据消费者返回不同的响应。如果有两个不同的响应,请使用两个单独的端点并要求不同的身份验证。请求总是可以伪造的,无论是在客户端还是服务器端发送。
标签: angular api http coldfusion taffy