SmarterApp Logo
Teacher Hand Scoring System (THSS) Installation Checklist
2024-03-26 14:03:06 -0400 |

Overview

Item Description
Purpose Provide interface for teachers to hand-score assessment items
Communicates With OpenAM
Permissions
ART
TIS
Repository Location https://github.com/SmarterApp/TDS_TestIntegrationSystem
Additional Documentation README
reportxml_os.xsd
SAML Templates

NOTE: The THSS database can reside on the same MSSQL Server that hosts the TIS databases.

Instructions

Create the THSS Database

Create THSS Databse User Account(s)

Create the TSS Database Schema

Create AWS Instance

Configure Windows AWS Instance

Configure the Web Server Components

Configure IIS Permissions for the Log Directory

IMPORTANT: Repeat the steps below for each log file directory. If you want applications to write to different log file directories, the IIS_IUSRS must be able to write to the desired directory/directories.

Edit log file directory security

Add IIS_IUSRS

Add IIS_IUSRS

Add Inbound and Outbound Firewall Rules to Allow Communicating with SQL Server

Deploy the Teacher Hand Scoring System

Build the Test Hand Scoring System

Choose Publish

Create a custom profile

Provide name for custom profile

Choose Publish

Choose Publish

Choose Publish

Deploy the THSS Component

Configure a THSS Website in IIS

Add website within IIS

Add website details

Configure the THSS Application

Get IDP Metadata

Configure the fedlet.cot File

cot-name=[Name of the Circle of Trust in OpenAM; use sbac if following this guide]
sun-fm-cot-status=Active
sun-fm-trusted-providers=https://[FQDN or IP address of OpenAM server]/auth, [Entity ID for THSS in OpenAM, use thss if following this guide]
sun-fm-saml2-readerservice-url=
sun-fm-saml2-writerservice-url=
cot-name=sbac
sun-fm-cot-status=Active
sun-fm-trusted-providers=https://sso-deployment.sbtds.org:443/auth, thss 
sun-fm-saml2-readerservice-url=
sun-fm-saml2-writerservice-url=

Configure the idp-extend.xml File

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EntityConfig entityID="https://sso-deployment.sbtds.org:443/auth" hosted="0" xmlns="urn:sun:fm:SAML:2.0:entityconfig">
    <IDPSSOConfig>
        <Attribute name="description">
            <Value/>
        </Attribute>
        <Attribute name="cotlist">
            <Value>sbac</Value>
        </Attribute>
        <Attribute name="wantArtifactResolveSigned">
            <Value></Value>
        </Attribute>
        <Attribute name="wantLogoutRequestSigned">
            <Value></Value>
        </Attribute>
        <Attribute name="wantLogoutResponseSigned">
            <Value></Value>
        </Attribute>
        <Attribute name="wantNameIDEncrypted">
            <Value></Value>
        </Attribute>
    </IDPSSOConfig>
</EntityConfig>

Configure the sp.xml File

<EntityDescriptor entityID="thss" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
    <SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://54.200.42.254/InitiateLogout.aspx" ResponseLocation="http://54.200.42.254/InitiateLogout.aspx"/>
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://54.200.42.254/InitiateLogout.aspx" ResponseLocation="http://54.200.42.254/InitiateLogout.aspx"/>
        <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="http://54.200.42.254/InitiateLogout.aspx"/>
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
        <AssertionConsumerService isDefault="true" index="0" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://54.200.42.254/InitiateLogin.aspx"/>
        <AssertionConsumerService index="1" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://54.200.42.254/InitiateLogin.aspx"/>
    </SPSSODescriptor>
</EntityDescriptor>

Configure the sp-extended.xml File

<EntityConfig xmlns="urn:sun:fm:SAML:2.0:entityconfig" xmlns:fm="urn:sun:fm:SAML:2.0:entityconfig" hosted="1" entityID="thss">
    <SPSSOConfig metaAlias="/sp">
        <Attribute name="description">
            <Value></Value>
        </Attribute>
        <Attribute name="signingCertAlias">
            <Value></Value>
        </Attribute>
        <Attribute name="encryptionCertAlias">
            <Value></Value>
        </Attribute>
        <Attribute name="basicAuthOn">
            <Value>false</Value>
        </Attribute>
        <Attribute name="basicAuthUser">
            <Value></Value>
        </Attribute>
        <Attribute name="basicAuthPassword">
            <Value></Value>
        </Attribute>
        <Attribute name="autofedEnabled">
            <Value>false</Value>
        </Attribute>
        <Attribute name="autofedAttribute">
            <Value></Value>
        </Attribute>
        <Attribute name="transientUser">
            <Value>anonymous</Value>
        </Attribute>
        <Attribute name="spAdapter">
            <Value></Value>
        </Attribute>
        <Attribute name="spAdapterEnv">
            <Value></Value>
        </Attribute>
        <Attribute name="spAccountMapper">
            <Value>com.sun.identity.saml2.plugins.DefaultLibrarySPAccountMapper</Value>
        </Attribute>
        <Attribute name="spAttributeMapper">
            <Value>com.sun.identity.saml2.plugins.DefaultSPAttributeMapper</Value>
        </Attribute>
        <Attribute name="spAuthncontextMapper">
            <Value>com.sun.identity.saml2.plugins.DefaultSPAuthnContextMapper</Value>
        </Attribute>
        <Attribute name="spAuthncontextClassrefMapping">
            <Value>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport|0|default</Value>
        </Attribute>
        <Attribute name="spAuthncontextComparisonType">
           <Value>exact</Value>
        </Attribute>
        <Attribute name="attributeMap">
           <Value>*=*</Value>
        </Attribute>
        <Attribute name="saml2AuthModuleName">
           <Value></Value>
       </Attribute>
       <Attribute name="localAuthURL">
           <Value></Value>
       </Attribute>
       <Attribute name="intermediateUrl">
           <Value></Value>
       </Attribute>
       <Attribute name="defaultRelayState">
           <Value></Value>
       </Attribute>
       <Attribute name="assertionTimeSkew">
           <Value>300</Value>
       </Attribute>
       <Attribute name="wantAttributeEncrypted">
           <Value></Value>
       </Attribute>
       <Attribute name="wantAssertionEncrypted">
           <Value></Value>
       </Attribute>
       <Attribute name="wantNameIDEncrypted">
           <Value></Value>
       </Attribute>
       <Attribute name="wantArtifactResponseSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="wantPOSTResponseSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="wantLogoutRequestSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="wantLogoutResponseSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="wantMNIRequestSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="wantMNIResponseSigned">
           <Value></Value>
       </Attribute>
       <Attribute name="cotlist">
           <Value>sbac</Value>
       </Attribute>
       <Attribute name="saeAppSecretList">
       </Attribute>
       <Attribute name="saeSPUrl">
           <Value></Value>
       </Attribute>
       <Attribute name="saeSPLogoutUrl">
       </Attribute>
       <Attribute name="ECPRequestIDPListFinderImpl">
           <Value>com.sun.identity.saml2.plugins.ECPIDPFinder</Value>
       </Attribute>
       <Attribute name="ECPRequestIDPList">
           <Value></Value>
       </Attribute>
       <Attribute name="enableIDPProxy">
           <Value>false</Value>
       </Attribute>
       <Attribute name="idpProxyList">
           <Value></Value>
       </Attribute>
       <Attribute name="idpProxyCount">
           <Value>0</Value>
       </Attribute>
       <Attribute name="useIntroductionForIDPProxy">
           <Value>false</Value>
       </Attribute>
       <Attribute name="relayStateUrlList">
       </Attribute>
    </SPSSOConfig>
</EntityConfig>

Configure the OpenAMSites.xml File

<?xml version="1.0" encoding="utf-8" ?>
<!-- This configuration file provides links for the drop-down navigation in THSS. -->
<!-- The state name must match the state specified in the settings.config document -->
<Contents>
  <Content ForState="SBAC" ContentSectionName="TssSubSites">
    <ClientSites>
      <ClientSite>
        <ClientID>Tide</ClientID>
        <Description>ART</Description>
        <Url>http://54.186.87.166:8080</Url>
      </ClientSite>
    </ClientSites>
  </Content>
</Contents>

Configure the DataDistribution.config File

<?xml version="1.0"?>
<TSSDataDistribution>
    <ConnectionStrings>
        <ConnectionString name="DefaultConnection" connectionString="Data Source=tis-deployment2.cugsexobhx8t.us-west-2.rds.amazonaws.com;Initial Catalog=TSS;User id=remoteuser;Password=[redacted]" default="true">
            <Districts>
                <add id="1001"/>
                <add id="1002"/>
                <!-- This section is redundant and added for example only as all districts not explicitly mentioned in another connection string are added to the default configuration. -->
            </Districts>
        </ConnectionString>
    </ConnectionStrings>
</TSSDataDistribution>

Configure the settings.config File

<?xml version="1.0"?>
    <appSettings>
        <add key="webpages:Version" value="2.0.0.0" />
        <add key="webpages:Enabled" value="false" />
        <add key="PreserveLoginUrl" value="true" />
        <add key="ClientValidationEnabled" value="false" />
        <add key="UnobtrusiveJavaScriptEnabled" value="false" />

        <add key="EMAIL_AS_UUID" value="true"/>
        <add key="ART_API_REST_API_BASE_URL" value="http://54.186.87.166:8080/rest" />
        <add key="ART_API_URL" value="http://54.186.87.166:8080/rest/user" />
        <add key="ART_API_CLIENT" value="SBAC_PT"/>
        <add key="ART_OAUTH_URL" value="https://sso-deployment.sbtds.org:443/auth/oauth2access_token?realm=/sbac"/>
        <add key="ART_OAUTH_PASSWORD_GRANTTYPE" value="true" />
        <add key="ART_OAUTH_USERNAME" value="prime.user@example.com"/>
        <add key="ART_OAUTH_REQUIRED" value="true"/>
        <add key="ART_OAUTH_PASSWORD" value="[redacted]"/>
        <add key="ART_OAUTH_SECRET" value="[redacted]"/>
        <add key="ART_OAUTH_CLIENTID" value="pm"/>


        <add key="IGNORE_TENANCY_CHAINS" value="False"/>
        <add key="SAML_OWNER_PREFIX" value="sbac"/>
        <add key="SAML_SESSIONREFRESH_URL" value="https://sso-deployment.sbtds.org/auth/identity/attributes?refresh=true"/>
        <add key="SAML_REDIRECT" value="http://54.200.42.254/"/>
        <add key="PERMISSIONS_SCHEMA_URL" value="http://54.213.111.234:8080/rest/role?component=Teacher Hand Scoring System"/>

        <!-- It is possible to load a pre-configured set of permissions from below instead of using the permissions API. Set LOAD_PERMISSIONS_FROM_LOCAL to true and load a role.json file in the App_Config folder. See Permissions API for JSON structure. -->
        <add key="LOAD_PERMISSIONS_FROM_LOCAL" value="false"/>
        <add key="ART_ENTITIES_DATA_CACHING_DAYS" value="1" />
        <add key="ART_SCORER_DATA_CACHING_MINS" value="30"/>
        <add key="IRIS_OPEN_SOURCE" value="True"/>
        <add key="IRIS_VENDOR_ID" value="2B3C34BF-064C-462A-93EA-41E9E3EB8333" />
        <add key="IRIS_ROOT_URL" value="http://54.186.182.136:8080/IRiS/"/>
        <add key="IRISBlackbox_ROOT_URL" value="http://54.186.182.136:8080/IRiS/"/>

        <add key="IRIS_PEM_LOCATION" value="" />
        <add key="IRIS_KEY_EXPIRE_MINUTES" value="30" />

        <add key="USER_GUIDE_LOCATION" value="/content/UserGuide/TSS_User_Guide.docx"/>
        <add key="SCORE_SUBMITTED_MESSAGE" value="The score has been saved." />
        <add key="ACCESS_DENIED" value="You are not Authorized User"/>
        <add key="SHOW_STATUS" value="true" />

        <!-- Minimum level for which logs should be created -->
        <add key="MinLogLevel" value="Info" />
        <add key="COOKIE_TIMEOUT_MINS" value="30"/>
    </appSettings>

Permission Settings

OpenAM Updates

back to Deployment Checklists

As of Fall 2018 the Smarter Balanced Test Delivery System (TDS) is no longer supported.

The code base and documentation for the TDS is available within the Smarter Balanced GitHub repository.

Creative Commons License Unless stated otherwise, all content on SmarterApp.org is licensed under a Creative Commons Attribution 4.0 International License.