Что такое SaaS?
SaaS расшифровывается как «Программное обеспечение как услуга». Если у вас есть программное обеспечение, которое вы представили как услугу, любой пользователь, принадлежащий к любому домену клиента, может получить доступ к этому конкретному программному обеспечению или приложению.
При регистрации поставщика услуг WSO2 Identity Server предоставляет вам возможность «SaaS Enabled», где вы можете разрешить любому пользователю-арендатору войти в приложение.
Если приложение не является приложением с поддержкой SaaS, пользователям, которые принадлежат к определенному домену клиента, зарегистрированному SP, будет разрешена только аутентификация в приложении.
Что делать, если у вас есть приложение, отличное от Saas, в домене клиента «wso2.com». Таким образом, только пользователи в домене клиента wso2.com смогут войти в это приложение. Но при входе в систему вам нужно явно указать домен клиента в имени пользователя. т.е. если мое имя пользователя [email protected], я должен ввести hasintha @ gmail.com @ wso2.com в качестве имени пользователя.
Почему нам нужно вводить домен клиента в имя пользователя?
На самом деле мы можем этого избежать. Потому что у всех пользователей должна быть часть @ wso2.com в качестве суффикса имени пользователя. Таким образом, решение для этого - просто добавить домен клиента «приложения», когда имя пользователя отправляется во время аутентификации.
Чтобы это сделать, вам необходимо выполнить следующие шаги, которые отредактируют файл basicauth.jsp, который находится в ‹IS_HOME› / repository / deployment / server / webapps / authenticationendpoint /
- Переименуйте существующий элемент «username» в «username_temp».
- Добавить новое скрытое поле в качестве имени пользователя
- При отправке формы запустите функцию javascript, которая извлекает домен клиента из параметра HTTP-запроса, а затем добавляет его в «username_temp» и назначает его «username»
Ниже приведен код файла basicauth.jsp. Я выделил измененные части по сравнению с исходной.
<%@ page import="org.owasp.encoder.Encode" %>
<form action="../commonauth" method="post" id="loginForm" onsubmit="DoSubmit();">
<% if (Boolean.parseBoolean(loginFailed)) { %>
<div class="alert alert-danger" id="error-msg"><%= Encode.forHtml(errorMessage) %></div>
<%}else if((Boolean.TRUE.toString()).equals(request.getParameter("authz_failure"))){%>
<div class="alert alert-danger" id="error-msg">You are not authorized to login
</div>
<%}%>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group">
<input id="username" name="username" type="hidden">
<input id="username_tmp" name="username_tmp" type="text" class="form-control" tabindex="0"
placeholder="Username">
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group">
<input id="password" name="password" type="password" class="form-control"
placeholder="Password" autocomplete="off">
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group">
<input type="hidden" name="sessionDataKey" value='<%=Encode.forHtmlAttribute
(request.getParameter("sessionDataKey"))%>'/>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group">
<div class="checkbox">
<label>
<input type="checkbox" id="chkRemember" name="chkRemember"> Remember me on this computer
</label>
</div>
<br>
<div class="form-actions">
<button
class="wr-btn grey-bg col-xs-12 col-md-12 col-lg-12 uppercase font-extra-large"
type="submit">Sign in
</button>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group">
<%if(request.getParameter("relyingParty").equals("wso2.my.dashboard")) { %>
<a id="registerLink" href="create-account.jsp?sessionDataKey=<%=Encode.forHtmlAttribute
(request.getParameter("sessionDataKey"))%>" class="font-large">Create an
account</a>
<%} %>
</div>
<div class="clearfix"></div>
</form>
<script type="text/javascript">
function DoSubmit(){
var tenantDomain = getParameterByName('tenantDomain');
var isSaaS = getParameterByName('isSaaSApp');
if (tenantDomain && isSaaS == 'false') {
document.getElementById("username").value = document.getElementById("username_tmp").value + '@' + tenantDomain;
}
return false;
}
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
</script>