我们有一个由ASP.NET Web API支持的Angular SPA,该API使用OAuth 2.0 Resource Owner Password Credentials Grant和Bearer Token进行授权。该API使用Microsoft.Owin.Security.OAuth来实现OAuth。
我们正在尝试与将使用Authorization Code Grant的第三方应用程序集成,以便用户可以授权它代表他们访问我们的应用程序。
我们希望授权页面成为SPA的一部分,但是我在弄清楚如何将SPA中的授权请求提交到API并将其重定向回第三方应用程序时遇到困难。
我尝试同时使用AJAX(与SPA中的所有其他API请求一样)和常规HTML形式(以便重定向响应重定向页面)。
我们最初是从API发送回JSON响应,然后让SPA自行进行重定向,但是OWIN会在出现错误时自动发送重定向响应。因此似乎没有任何方法可以避免重定向响应。
如果我通过AJAX发送请求,浏览器将通过发送另一个AJAX请求而不是重定向页面来自动跟踪服务器发送的重定向响应。
如果我使用常规HTML表单发送请求,似乎没有任何方法可以发送带有Bearer Token的必需 public function ctrNewSearch($word){
$table = "searchs";
$response = SearchModel::mdlShowSearchs($table);
$foundWord = 0;
$amount= "1";
foreach ($response as $key => $value) {
if ($value["word"] == $word) {
$foundWord = 1;
$id = $value["id"];
$updatedAmount= $value["amount"] + 1;
}
if ($foundWord == 1){
$response1= SearchModel::mdlUpdateSearch($table, $word, $id, $updatedAmount);
$foundWord = 0;
return $response1;
} else {
$response0 = SearchModel::mdlAddSearch($table, $word, $amount);
return $response0;
}
}
}
}
头。
答案 0 :(得分:0)
我最终使用了HTML表单,并在表单主体中发送了当前访问令牌。我在访问令牌的表单中创建了一个隐藏的输入,并且仅在提交表单时设置其值(以减少用户或恶意脚本/扩展看到它的机会)。
在服务器端,我们的OAuth代码以前只在Authorization
标头中查找访问令牌;我将其更改为也可以在请求表单(IOwinRequest.ReadFormAsync
)中查找授权码请求。
OAuth代码现在将重定向响应发送到成功的授权代码请求,而不是发送带有重定向URI的JSON响应。