Что такое 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 /

  1. Переименуйте существующий элемент «username» в «username_temp».
  2. Добавить новое скрытое поле в качестве имени пользователя
  3. При отправке формы запустите функцию 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>