URL-адрес возврата для securepage.aspx обычно сохраняется в параметре контекста при перенаправлении для входа в систему. Как на странице входа в ACS, так и на настраиваемой загружаемой странице есть javascript, который запрашивает ACS для списка поставщиков удостоверений, а затем генерирует ссылки для входа для каждого IP-адреса. Хостинг-версия ACS отличается тем, что она также собирает заданный ей wctx и настраивает каждый URL-адрес входа в систему IP для сохранения этого контекста. Таким образом, ACS знает, куда перенаправить пользователя назад, когда аутентификация завершена.
Пользовательская загружаемая страница входа в систему, однако, не сохраняет этот контекст, поэтому вы получаете такое поведение, ACS просто перенаправляет вас на URL-адрес возврата, который вы указали в конфигурации ACS, в данном случае default.aspx.
Но вы можете изменить свою пользовательскую страницу входа, чтобы вставить этот пропущенный параметр. Сложность здесь в том, что этот контекст сообщается по-разному в зависимости от протокола. Для LiveID ( WS-Federation ) входящий wctx может быть повторно передан в исходящем wctx по ссылке для входа в систему liveID, но в коробочной форме "cx". Ниже приведен некоторый JavaScript, который я добавил в функцию CreateIdentityProviderButton (), которая достигает этого.
...
//Creates a stylized link to an identity provider's login page
function CreateIdentityProviderButton(identityProvider) {
// Some code I stole from fellow stackoverflow member for extracting query parameters =)
var urlParams = {};
(function () {
var e,
a = /\+/g, // Regex for replacing addition symbol with a space
r = /([^&=]+)=?([^&]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = window.location.search.substring(1);
while (e = r.exec(q))
urlParams[d(e[1])] = d(e[2]);
})();
var cx = "&cx=" + encodeURIComponent(urlParams.wctx);
var idpList = document.getElementById("IdentityProvidersList");
var button = document.createElement("button");
button.setAttribute("name", identityProvider.Name);
button.setAttribute("id", identityProvider.LoginUrl + encodeURIComponent(cx));
...
Для Yahoo или Google ( OpenID ) этот контекст возвращается в openid.return_to в качестве параметра запроса "context". Таким образом, на странице входа в систему вы можете аналогичным образом отредактировать openid.return_to в вашей ссылке для входа в систему следующим образом:
... openid.return_to=https://youracstenant.accesscontrol.windows.net:443/v2/openid?context=<value of the wctx extracted from javascript above> ...
Вы можете написать код для особого случая своей ссылки для входа в систему, основываясь на том, какое имя провайдера идентификации вы видите в ответе json ACS IdentityProvider.js.