交大的 Single Sign On 系統

Facebook 上看到這個消息:「交通大學 OAuth 平台上線!」,由於 D2 E-mail 系統上沒什麼資料,主要賣點還是 Single Sign On 的部份。

當初想要做 OpenID 的 SSO (當年已經有 OpenID 1.0),跟 cschen 申請了 sso.nctu.edu.tw (還掛在 ccreader 上呢),但後來還是沒實做出來 (也忘了是什麼原因),過了快十年總算有人跟計中合作跳下來做了 XD

SSO 很多人都能做 (像是透過 POP3S 或是 IMAPS 認證,甚至透過網頁登入確認),但只有帶著官方名義做才有意義 (也就是本來就碰的到密碼的人來管理),這次唯一可惜的是還沒有讓系統完全自動化... (i.e. 自由申請)

用 Net::OpenID::Consumer 取得 Google 的帳戶資料

GoogleOpenID 服務有提供 OpenID Attribute Exchange 1.0 (參考「Federated Login for Google Account Users」這個網頁), 測了一陣子才知道要怎麼透過 PerlNet::OpenID::Consumer 取得資料:

my $csr = Net::OpenID::Consumer->new(
    ua => LWPx::ParanoidAgent->new,
    args => {},
    consumer_secret => 'secret',
    required_root => 'http://.../',
    minimum_version => 2
);

my $claimed_identity = $csr->claimed_identity('https://www.google.com/accounts/o8/id');

$claimed_identity->set_extension_args(
    'http://openid.net/srv/ax/1.0',
    {
        mode => 'fetch_request',
        required => 'email',
        'type.email' => 'http://axschema.org/contact/email',
    }
);

my $check_url = $claimed_identity->check_url(
    delayed_return => 1,
    return_to => 'http://.../...',
    trust_root => 'http://.../'
);

say $check_url;

之前會試不出來,主要是卡在 type.email 忘記加,加上去的時候又打成 email...