miside.sso – Sømløs overgang fra Mi side til andre systemer

Autentiseringsprotokollen bruker session-id på Mi side og "callback" tilbake for å sjekke om bruker med session-id er gyldig og er innlogget. Mi side svarer bare på "callback" fra bestemte maskiner (IP-nr).

I selvlaget portlets på Mi side, vil følgende attributter bli erstattet:

  Attributt:

 Erstattes med: 

%[id]%session-id
%[emnekode]%emnekode
%[emnenavn]%navn på emne (urlencoded)
%[periode]%periode, feks: 2010v
%[uaktkode]%undervisningsaktivtetskode, feks: exphil-hfeks-0-1-2-2
%[uaktnavn]%navn på undergruppe(r) (uaktivitet) (urlencoded)
hvis den befinner seg under andre undergrupper, vil uaktnavn bestå av:
"[undergrpnavn] / [undergrpnavn]...". Hvis det skal brukes til å splitte opp som egne undergrupper, så er det en fordel at selve navnet på undergruppene ikke inneholder ".. / ..".
%[referer]%returnerer siden(url) hvor lenken er (urlencoded)

Eksempel på tekst lagt inn i selvlaget portlet:

<a href="http://kark.uib.no/cgi-win/kark.exe?uibep&id=%[id]%&emne=%[emnekode]%&periode=%[periode]%&ukatkode=%[ukatkode]%&emnenavn=%[emnenavn]%&uaktnavn=%[uaktnavn]%">Overgang til Kark</a>

Når noen trykker på lenken, må skriptet spørre tilbake til Mi side med minimum session-id og får da som svar brukernavnet m.m, hvis vedkommende er logget inn. Mi side godtar bare slik forespørsel fra bestemte maskiner (ip-nr).

 

 

  Returdata

  Argument

id

id & emnekode & periode

id & emnekode & periode & uaktkode

 brukernavn 

 brukertype
(student, ansatt,
ekstern)

 navn

J

 studentnr*

 status
(X eller tomt)

N

J (på emnet)

J (på emnet)

 vurd_status
(0 eller 1)

N

J (på emnet)

J (på emnet)

 admin
(0 eller 1)

J (på emnet)

J (på undergruppe)

 role 

J (på emnet) 

J (på undergruppe) 

 fak_inst
(4 siffer)

J (på emnet)

J (på emnet)

 fak_navn

J (på emnet)

J (på emnet)

 inst_navn

J (på emnet)

J (på emnet)

 stednavn_kontroll

J (på emnet)

J (på emnet)

*) studentnr leveres bare til bestemte maskiner. Hvis ikke studentnr eksisterer vil det istedet stå "ukjent".

Used by

callback – tilbakespørring til Mi side

GET https://miside.uib.no/fs-cron/?jobb=auth_user&id={mottatt session-id}&emnekode={mottatt emnekode}&periode={mottatt periode}
id number session-id
emnekode string emnekode
periode string periode eks 2010v
uaktkode string uaktivitetskode
response
200 OK
Content-Type: text/xml
<data>
 <brukernavn [brukernavn]</brukernavn>
 <brukertype [brukertype]</brukertype>
 <navn>[navn til person: first_names last_name]</navn>
 <studentnr>[studentnr til person, eventuelt "ukjent"]</studentnr>
 <status>[status]</status>
 <vurd_status>[vurderingsstatus]</vurd_status>
 <fodselsdato>[fødselsdato]</fodselsdato>
 <admin>[admin]</admin>
 <role>[role]</role>
 <fak_inst>[fak_inst]</fak_inst>
 <fak_navn>[emnet tilhører: navn på fakultet]</fak_navn>
 <inst_navn>[emnet tilhører: navn på institutt]</inst_navn>
 <stednavn_kontroll>[stednavn: kontroll-tilhørighet til emnet]</stednavn_kontroll>
 <undergrupper>
   <ugruppe>
     <ukode>[unik kode på undergruppe]</ukode>
     <uaktkode>[uaktkode, hvis uaktivitet fra FS, ellers tomt]</uaktkode>
     <ugruppenavn>[navn på undergruppe]</ugruppenavn>
     <ugrupperole>[rolle bruker har på undergruppe]</ugrupperole>
   </ugruppe>
   ...
   <ugruppe>
     <ukode>[unik kode på undergruppe]</ukode>
     <uaktkode>[uaktkode, hvis uaktivitet fra FS, ellers tomt]</uaktkode>
     <ugruppenavn>[navn på undergruppe]</ugruppenavn>
     <ugrupperole>[rolle bruker har på undergruppe]</ugrupperole>
   </ugruppe>
  </undergrupper>
</data>

Returnerer bare en newline hvis bruker ikke er innlogget.

Brukertype kan være: student, ansatt eller ekstern. Hvis brukertypen er ekstern, vil brukernavnet være den eksterne epost-adressen.

Status kan være: X - bruker har vurderingsmelding og/eller undervisningsmelding på emnet. Tomt hvis ikke. Krever at både emnekode og periode er angitt ved tilbakespørring.

Vurd_status kan være 1 eller 0 avhengig om studenten har gyldig vurderingsmelding eller ikke. Krever at både emnekode og periode er angitt ved tilbakespørring.

Role på emne kan være: dotlrn_student (student) dotlrn_ta (administrativ kontaktperson) dotlrn_ca (undervisningsassistent) dotlrn_cadmin (administrator) dotlrn_instructor (emneansvarlig) dotlrn_sensor (sensor)

Role på undergruppe/uaktiviteter kan være: dotlrn_member (medlem) dotlrn_admin (administrator)

Undergrupper: lister opp alle undergrupper som bruker er medlem på. Hvis bruker er admin, vil alle undergrupper listes opp uavhengig av medlemskap. Uaktkode vil ha verdi, hvis undergruppe kommer fra FS i form av undervisningsaktivitet. I slike tilfeller vil ukode og uaktkode normalt ha samme verdi.

Kode-eksempel

index.php:

$sessid=$_REQUEST["sessid"];
$emnekode=$_REQUEST["emnekod"];
$periode=$_REQUEST["periode"];
$uaktnavn=$_REQUEST["uaktnavn"];

$error_msg="";

// sjekk om forespørsel kom fra gyldig emne/periode/undergruppe
if ($emnekode == "SANT101" and $periode == "2006v" and $ukatnavn == "Forelesninger og film") {

    // spør tilbake for få bekreftet at bruker er innlogget
    $res = file_get_contents("https://studentportal.uib.no/fs-cron/?jobb=auth_user&id=$sessid&emnekode=$emnekode&periode=$periode");

    $lines = split("\n",$res);
    foreach($lines as $l){

        if (trim($l) == "")
            continue;

        if (preg_match_all("/<([^>]+)>(.*)<\/\\1>/", $l, $matches, PREG_SET_ORDER)) {
                $tag=$matches[0][1];
                $val=$matches[0][0];

            $valid_tags = array(brukernavn, brukertype, navn, status, admin, role, ukode, uaktkode, ugruppenavn, ugrupperole);
                if (in_array($tag, $valid_tags))
                eval("\$$tag = \"".$val."\";");
        }
    }

    // hvis brukernavn ikke er satt, så er ikke bruker for øyeblikket logget inn i på Mi side
    // eller hvis role ikke er satt - betyr at bruker ikke er medlem på det aktuelle emne (event. undergruppe)
    if ($brukernavn == "" or $role == "") {
        $error_msg = "ikke innlogget";
    } else {
        // ok, vi godkjenner forespørselen med å sette brukernavn i lokal php-session
        session_start();
        $_SESSION["brukernavn"]=$brukernavn;
    }
} else {
    $error_msg = "kommer ikke fra gyldig emne/periode/undergruppe";
}

if ($error_msg != "") {
    echo $error_msg;
    exit;
}

$redirect="main.php"; // bytt til gyldig url
header("Location: $redirect");

main.php:

session_start();
if ($_SESSION["brukernavn"] == "") {
    // vi har en uautorisert bruker, avbryt
    exit;
}

// fortsettelse på php-kode
echo "velkommen!";

keepalive – Hold brukerens sesjon på Mi side "i live".

GET https://miside.uib.no/fs-cron/?jobb=keep_alive
response
200 OK
Content-Type: text/plain
OK

Returnerer "OK", hvis sesjonen er fortsatt i live, hvis ikke vil hele innloggingssiden returneres. Kan feks. legges inn i en minimal iframe.

relogin – Innloggingssiden til Mi side kan brukes til å logge inn på nytt når lokal session-timout inntreffer.

GET https://miside.uib.no/register/?return_url={url}
return_url string url

Hvis url inneholder argumentet sessid med tom verdi - 'sessid=', så vil Mi side legge på session-id - som igjen kan brukes til å sjekke om personen faktisk fikk logget inn på Mi side