使用具有安全用户名和密码的API,即认证

时间:2015-09-02 15:02:23

标签: javascript ajax api authentication cast-iron

如何在移动应用程序中使用IBM Cast Iron API。 API正在使用Username& amp ;;密码(需要401个授权)。 这里的问题是如何使用Ajax调用在javascript中验证 API。

这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            $("#bSubmit").click(function () {
                alert("Button Clicked");
                var xmlString;
                var username = 'myusername';
                var password = 'mypassword';
                $.ajax({
                    url: 'MYURL',
                    crossDomain: true,
                    headers: {
                        "Authorization": "Basic " + btoa(username + ":" + password)
                    },

                    type: "POST", //This is what you should chage
                    dataType: "xml",
                    contentType: "application/xml; charset=utf-8",
                    }).done(function (response) {
                        alert("Sucess"+response);
                            xmlString = (new XMLSerializer()).serializeToString(response);
                             $("#displayout").html(xmlString);
                    }).fail(function (request, textStatus, errorThrown) {
                        alert("wrong");
                        alert(textStatus + " : " + errorThrown.toString());
                 });
                });
          });
    </script>
</head>
<body>
    <input type="text" name="1" id="txt1">
    <input type="submit" name="b" value="Submit" id="bSubmit"> 
    <div id="displayout">
    </div>
</body>

我在firefox和IE中添加了CORS过滤器。这在IE中工作正常。但它在firefox和Chrome中无效。

在IE中: 我通过以下link更改了设置 它对我有用。

在firefox控制台中显示如下:

阻止跨源请求:同源策略禁止在https://MYURL读取远程资源。这可以通过将资源移动到同一域或启用CORS来解决。

在Chrome控制台中,它显示如下:

选项https://MYURL 401(需要授权)

XMLHttpRequest无法加载https://MYURL。无效的HTTP状态代码401

你能帮我解决吗?

1 个答案:

答案 0 :(得分:0)

使用Java我得到了响应。但是使用AJAX调用仍然是一个像授权问题一样的错误。

基于Java的代码:

from collections import Counter

clothing_map = {
    'Zara': ['shoes', 'shirt'],
    'GAP': ['shirt'],
    'Old_Navy': ['shirt'],
    'Banana_Republic': ['shoes', 'shirt'],
    'Zenga': ['shoes'],
    'Nike': ['jacket', 'shoes'],
    'Adidas': ['shoes'],
    'Hermes': ['tie'],
    'Ferragamo': ['tie'],
    'Alfani': ['jacket', 'tie'],
    'Under_Armour': ['jacket'],
    'Polo': ['jacket'],
    'The_North_Face': ['jacket']
}

def get_brands(items = []):
    l = [key for key, val in clothing_map.items() for x in items if x in val]
    return [key for key, val in Counter(l).items() if val > 1]

mylist = ['shirt', 'pants', 'shoes', 'tie', 'jacket']
print(get_brands(mylist))
#['Alfani', 'Nike', 'Zara', 'Banana_Republic']