背景
我已经实现了Thinktecture.IdentityServer.V3(openID Connect one)。我已将OAuth2持票人令牌以下列形式返回给我的javascript客户端(隐式流程):
{
"id_token": "eyJ0eXAiOiJKV1QiLCJh...", // JWT
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni..", // JWT
"token_type": "Bearer",
"expires_in": "3600",
"scope": "openid profile read write email",
"state": "1299139105028949"
}
但是在所有示例中,他们只在调用服务时将access_token传递给资源提供者。
$.ajax({
url: 'http://localhost:2727/Account/123/Get',
headers: {
Authorization: "Bearer " + $scope.response.access_token
}
})
假设
如果我有这个权利,我使用访问令牌进行身份验证。然后我根据id_token中的声明进行授权(我不想进行单独的数据库调用 - 我希望它完全独立)。
问题
如何通过ajax将此信息传递给我的webapi2端点(假设我已经设置了CORS等)以及我需要连接哪些中间件来验证它? (我猜猜其中一个令牌验证器和一个claimManager但是那么多,我无法决定哪一个是正确的使用者)。
非常感谢
答案 0 :(得分:3)
id_token用于客户端 - 它必须由客户端验证(或者如果客户端没有必要的加密库,则由idsrv中的身份令牌验证端点验证)。然后使用访问令牌访问资源。
答案 1 :(得分:1)
您似乎使用AngularJS,因此可以使用$http
服务在标头中设置令牌
例如:
$http.post("/login", credentials).then(function(response) {
$httpProvider.defaults.headers.common["Authorization"] = "Bearer " + $scope.response.access_token;
});
每次会话都必须执行此操作。
<强>更新强>
使用jQuery这样的东西
//This repesent the token you got after login
var authToken = {
"id_token": "eyJ0eXAiOiJKV1QiLCJh...", // JWT
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1Ni..", // JWT
"token_type": "Bearer",
"expires_in": "3600",
"scope": "openid profile read write email",
"state": "1299139105028949"
}
$.ajax({
url: "http://localhost:2727/Account/123/Get",
type: "get",
dataType: "json",
beforeSend: function (request)
{
request.setRequestHeader("Authorization", authToken.token_type + " " + authToken.access_token);
}
});