На сервере, есть ли какой-нибудь способ провести различие между внутренним и внешним запросом API REST?
Почему?
Причина, по которой я хочу различить дваПроисходит это потому, что я могу, основываясь на рекомендациях респондентов, захотеть вернуть другой набор данных в зависимости от того, кто пытается сделать запрос.
Сводка
Мое определение внутреннего может быть неправильным.В данном случае «внутренний» означает запрос, сделанный из запроса 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)
);
}
шаблон.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>
Пожалуйста, поймите, что я упростил эти 2 фрагмента кода, чтобы все было понятно.
Когда запрос попадает на сервер, как я могу узнать, какой запрос поступил через XHTTP, а какой был отправлен через CFHTTP [Curl]?
Я использую Taffy.io REST API framework,Итак, вот упрощенный метод внутри CFC «ресурсы», который я мог бы использовать для обработки запроса:
resources / 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 Lucee 4.5 IIS7 +