0

朋友们,我知道你们经常遇到这类问题。即使经过大量的谷歌搜索,我也无法找到答案。好吧,让我们来看看这个问题。

要求:使用 jquery ajax 请求调用启用基本身份验证的 WCF 服务 GET API。

客户端代码:

<script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="Scripts/Base64.js" type="text/javascript"></script>
<%--<script src="Scripts/jquery.base64.js" type="text/javascript"></script>--%>
<script type="text/javascript">
    function make_base_auth(user, pass) {
        var tok = user + ':' + pass;
        var hash = Base64.encode(tok);
        return "Basic " + hash;
    }


    $(document).ready(function () {
        var username = 'user';
         var password = 'ppp';

        var auth = make_base_auth(username, password);
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            contentType: "application/javascript",
            xhrFields: {
                withCredentials: true
            },
            cache: false,
            crossDomain: true,
            beforeSend: function (xhr) {                   
                xhr.setRequestHeader("Authentication", auth)
            },                
            data: { 'inputData': "{PatientID:'12',FromDateTime:'05/21/2013 1:28:15 PM',ToDateTime:'05/21/2013 1:28:15 PM',ResponseType:'json',CompressResponse:'false'}" },


url:"http://192.168.15.160/RestAPI/Service.svc/GetMedicationValues",             


            success: function (jsonData) {
                console.log(jsonData);
            },
            error: function (request, textStatus, errorThrown) {
                console.log(request.responseText);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    });
</script>

问题:我在运行客户端应用程序时弹出登录。只有当我在弹出窗口中提供正确的凭据时,我才会得到输出,无论我在请求标头中传递什么凭据。我遇到过很多人问这个问题.有没有人能够解决这个问题?谢谢你。

4

1 回答 1

0

JSONP不适用于基本身份验证。如果您不需要跨域请求,请使用 json 作为数据类型。

Alos 请注意,从 JQuery 1.7 开始,现在有两个身份验证选项:用户名和密码

如果服务器在提供响应之前执行 HTTP 身份验证,则可以通过用户名密码选项发送用户名和密码对。

于 2013-05-23T13:38:07.177 回答