Okta API 或标准 CURL/ajax 问题

Okta API or standard CURL/ajax problems

我想从 Okta API 中提取当前用户的登录名,但我通常只是一个 HTML/CSS 人,所以我很费力。我目前坚持这个:

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
jQuery.ajax({
    url: "https://harmelin.okta.com/api/v1/users/me",

    type: 'GET',
    dataType: 'json',
    contentType: 'application/json',
    processData: false,
    success: function (data) {
      alert(JSON.stringify(data));
    },
    error: function(){
      alert("Cannot get data");
    }
});

</script>
</head>

<body>
<script type="text/javascript">
    document.write(data.profile.login);
</script>
</body>

我过去曾将部分代码与其他 API 一起使用,但不得不对其进行一些修改。我知道我的问题是授权,因为我收到 403 错误。 Okta 文档将此作为请求示例提供:

curl -v -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: SSWS ${api_token}" \
"https://${org}.okta.com/api/v1/users/me"

如何在我的脚本中获得授权?这会为我提供未来发展所需的东西吗 (data.profile.login)?

你应该添加

(代码未经测试)

headers: {
     "Authorization": "SSWS ${api_token}",
     "Content-Type": "application/json",
     "Accept": "application/json"

},

您应该在来自浏览器的请求中包含 SSWS 令牌。任何阅读您页面源代码的人都可以使用它来修改您的组织。

如果您收到 403,那是因为用户未登录或未发送 cookie。

如果用户没有登录,他们应该使用the okta-signin-widget, okta-auth-js, or your login page登录。

在你的例子中,cookie 没有被发送,因为它是一个 CORS 请求。默认情况下,jQuery 不会在跨域请求时发送 cookie。您可以通过在请求中发送 withCredentials 来解决此问题。

用户登录后,以下请求应该有效:

jQuery.ajax({
    url: "https://harmelin.okta.com/api/v1/users/me",
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json',
    xhrFields: {
        withCredentials: true
    },
    success: function (data) {
        alert(JSON.stringify(data));
    },
    error: function(err){
        alert(JSON.stringify(err));
    }
});