SAML 인증 솔루션에 iFrame을 사용해야한다는 요구 사항이 있습니다. 기본적으로, 우리는 SAML 서비스를 호출하는 페이지에서 Iframe을 생성해야합니다. iFrame이 Auth 객체를 가져 오면 parent.postMessage(authObj)
을 해제하여 부모 정보에 대한 인증 정보가 반환되었음을 알립니다.iFrame의 창 이벤트에서 각도 양방향 바인딩이 업데이트되지 않습니다.
각도 서비스에서 해당 개체를 캡처하여 나머지 응용 프로그램에서 사용할 수있게하려고합니다.
각도 응용 프로그램이 SAML 토큰이 반환되기 훨씬 전에 부트 스트랩하기 때문에 필자가 작성한 Angular Auth Service는이 토큰을 처리하기 위해 $window
에 이벤트 수신기가 있어야합니다. 그것은 작동하지만 서비스가 업데이트 될 때 양방향 경계보기 업데이트가 표시되지 않습니다. 여기에 내가 뭘하는지 보여주는 몇 가지 코드는 다음과 같습니다
각도 서비스 :
angular.module('common.AuthDataModule', [])
.service('AuthDataService', function($window, $rootScope) {
var AuthObj = {};
AuthObj.params = {
"isAuthorized": false,
"principal": '',
"description": '',
"authorizationToken": ''
};
function setAttributes(element, attributes) {
for (var attr in attributes) { element.setAttribute(attr, attributes[attr]); }
}
var createIframe = (function() {
var iframe = document.createElement("iframe");
setAttributes(iframe, {
"name": "auth",
"id": "myFrame",
"src": "https://my.dev.SAML2AuthService",
"height": "0",
"width": "0",
"border": "0"
});
document.body.appendChild(iframe);
})();
// Listen to auth iframe message
var authEvent = function(event) {
data = event.data;
if (data.isAuthorized === "true" && data.authorizationToken !== null) {
AuthObj.params.isAuthorized = data.isAuthorized;
AuthObj.params.principal = data.principal;
AuthObj.params.description = data.description;
AuthObj.params.authorizationToken = data.authorizationToken;
}
}
};
$window.addEventListener ("message", authEvent, false);
var getAuth = function() {return AuthObj;};
return {getAuth: getAuth};
});
컨트롤러 :
angular.module("container.WorkspaceCtrl", ['common.AuthDataModule'])
.controller("WorkspaceCtrl", function ($scope, AuthDataService, $rootScope) {
$scope.AuthObj = AuthDataService.getAuth();
});
HTML
<pre style="height:250px" class="testinject">
{{AuthObj.params.authorizationToken | json}}
</pre>
디버그 할 수 있고 인증 obj 은이 리턴되고, $digest
을 강제 실행하면 뷰가 업데이트된다는 것을 알 수 있습니다. 이것은 Angular가 변경 사항을 "보지"않는다고 생각하게 만듭니다. 따라서보기를 업데이트 할 필요가 없습니다. 내가 놓친 게 있니? documentation 가입일
이 검증되지 않은 코드가 완벽하게 작동하는지 ... 감사합니다! 그게 정확히 내가 누락 된 ... 문서 참조 주셔서 감사합니다! – tengen
도와 드릴 수있어서 다행입니다. – tasseKATT