簡體   English   中英

PHP-說明我的SSO身份驗證所需的步驟

[英]PHP - Explain steps needed for my SSO authentication

我在公司建立了很多內部應用程序。 我的編程是在數據庫/應用程序級別上。 我的大多數應用程序多年來一直使用相同的登錄/身份驗證類。 但是,該公司希望一切都通過其SSO身份驗證應用程序進行。 他們向我發送了他們的SSO應用程序URL,他們傳遞的字段名稱,網站actionURL和我的appKey。

我所有的應用程序都在同一個域中。 我了解可以將Cookie設置為可在整個域上使用並進行設置。 現在,由於我編寫了一些非常簡單的測試代碼,我有些困惑。 它會將用戶帶到SSO服務器,並進行身份驗證並將其發送回我的actionURL(這是我的域的根目錄)。

因此,我嘗試請求代碼背后的URL,它表明我需要進行身份驗證,將我傳遞給SSO應用程序,然后再傳遞回我的actionURL。 我需要在actionURL上執行什么操作才能瀏覽應用程序。

當前代碼:

session_start();

if ($_POST && isset($_POST['digest']))       
{
    $digest = $_POST["digest"];
    // set the session variables ...

    $_SESSION['username'] = $_POST["firstname"]." ".$_POST["lastname"];
    $_SESSION['firstname'] = $_POST["firstname"];
    $_SESSION['lastname'] = $_POST["lastname"];
    $_SESSION['email'] = $_POST["email"];
    $_SESSION['uid'] = $_POST["uid"];


    // Needed for key
    $uid = $_POST["uid"];
    $time = $_POST["time"];

    // Read the property file with the key and URL  so this won't go into the main code ...
    // this sets $appKey and $safeurl

    require_once("safe_login_properties.php");

    $mykey = "".$uid.$time.$appKey;
    $mydigest = md5($mykey);



    if ($debugthis)    // enable this for some debugging
    {
        $fp = fopen("DebugInfo.txt", "a");
        fprintf($fp, "%s\n", date("H:i:s"));

        foreach($_POST as $p => $v)
        {
            fprintf($fp, "POST: %s: %s\n", $p, $v);
        }
        foreach($_SESSION as $p => $v)
        {
            fprintf($fp, "SESSION: %s: %s\n", $p, $v);
        }

        fprintf($fp, "mykey: %s (uid: %s, time %s, key %s)\n", $mykey, $uid, $time, $appKey);
        fprintf($fp, "posted digest: %s\n", $digest);
        fprintf($fp, "mydigest: %s\n", $mydigest);

        if ($digest == $mydigest)
            fprintf($fp, "Digest match\n");
        else
            fprintf($fp, "***** digest does not match\n");
        fclose($fp);
    }

    if ($digest != $mydigest)
    {
       die("Invalid login - expected digest does not match");
    }

}

if (!isset($_SESSION['username']) || empty($_SESSION['username']))
{
    // Read the property file with the key and URL  so this won't go into the main code ...
    // this sets $appKey and $safeurl
    require_once("safe_login.php");
    header("Location: ".$safeurl);
}

附加信息-我所有的應用程序均基於mysql和php。 因此,我需要將mysql片段放入其中。 我需要說是的,您已被授權,您的用戶名已通過,現在我們將在mysql數據庫中查找您並使用您對應的行進行權限/訪問。 那有意義嗎? 立即嘗試編寫該部分。

在您的情況下,您的MySQL數據庫中的用戶和SSO服務器之間必須存在映射。 一個簡單的地址就是電子郵件地址。 更好的是GUID-全局唯一ID。 無論如何,SSO服務器在調用actionURL(以SSO術語...您的回調URL)時應傳遞一個唯一的ID來標識用戶。

一旦獲得唯一ID,就可以使用該ID從MySQL數據庫中檢索用戶。 如果他存在,請登錄。

通常,SSO服務器將創建一個cookie,您的應用程序可以看到該cookie。 這應該表明您的用戶是否登錄(因此您不必繼續返回到服務器來驗證用戶身份)。

高溫超導

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM