Мне удалось успешно использовать внешнюю аутентификацию с datazen через HTTPWEBREQUEST из кода программной части с VB.NET, но я не понимаю, как использовать это с iframe или даже с div. Я думаю, может быть, файлы cookie/токен авторизации не отслеживают iframe? Datazen начинает загружаться правильно, но затем перенаправляет обратно на страницу входа, как будто он не проходит аутентификацию. Не уверен, как сделать эту часть, этот материал довольно нов для меня, и любая помощь будет принята с благодарностью!
К ошибкам веб-страницы относятся:
-OPTIONS url send @ jquery.min.js:19b.extend.ajax @ jquery.min.js:19Viewer.Controls.List.ajax @ Scripts?page=list:35Viewer.Controls.List.load @ Scripts? page=list:35h.callback @ Scripts?page=list:35 VM11664 about:srcdoc:1
XMLHttpRequest не может загрузить http://datazenserver.com/viewer/jsondata. Ответ на предварительную проверку содержит неверный код состояния HTTP 405Scripts?page=list:35.
load(): не удалось загрузить данные JSON. V…r.C…s.List {версия: «2.0», описание: «KPI и загрузчик и контроллер списка панелей мониторинга», URL: «/viewer/jsondata», индекс: «/viewer/», json: null…} (анонимно function) @ Scripts?page=list:35c @ jquery.min.js:4p.fireWith @ jquery.min.js:4k @ jquery.min.js:19r @ jquery.min.js:19 Scripts?page=list: 35
GET http://datazenserver.com/viewer/login 403 (Запрещено) (анонимная функция) @ Scripts?page=list:35c @ jquery.min.js:4p.fireWith @ jquery.min.js:4k @ jquery.min.js:19r @ jquery.min.js:19
' ''//////////////////////////////////
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create("http://datazenserver.com/"), HttpWebRequest)
myHttpWebRequest.CookieContainer = New System.Net.CookieContainer()
Dim authInfo As String = Session("Email")
myHttpWebRequest.AllowAutoRedirect = False
myHttpWebRequest.Headers.Add("headerkey", authInfo)
myHttpWebRequest.Headers.Add("Access-Control-Allow-Origin", "*")
myHttpWebRequest.Headers.Add("Access-Control-Allow-Headers", "Accept, Content-Type, Origin")
myHttpWebRequest.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse)
Response.AppendHeader("Access-Control-Allow-Origin", "*")
' Create a new 'HttpWebRequest' Object to the mentioned URL.
' Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
Dim streamResponse As Stream = myHttpWebResponse.GetResponseStream()
Dim streamRead As New StreamReader(streamResponse)
frame1.Page.Response.AppendHeader("Access-Control-Allow-Origin", "*")
frame1.Page.Response.AppendHeader("headerkey", authInfo)
frame1.Attributes("srcdoc") = "<head><base href='http://datazenserver.com/viewer/' target='_blank'/></head>" & streamRead.ReadToEnd()
HttpWebRequest
, но могу представить, если бы он поддерживал их через перенаправления, и в этом случае это имело бы смысл. Ваш ответ будет иметь полностью аутентифицированное тело, но затем вы поместите его в iframe, и ваш файл cookie, конечно, не будет передан вместе с ним. Я действительно не уверен, есть ли какой-либо надежный способ сделать это. Если только, я полагаю, если бы вы могли поместить все в один и тот же домен (с поддоменами), вы могли бы установить файл cookie и использовать его на своем прокси-сервере или напрямую для внешней аутентификации. Это сработает. 02.02.2016