我已经查看了PowerSchool关于OpenID实现的文档。但是,我相信它错过了重要信息,即我们如何传递所需的属性。我已经研究了其他平台中的示例实现。但是,它们似乎与文档所谈论的内容不同。
在这种情况下,我该如何在PHP中实现PowerSchool的Open ID。经过一番挣扎,我已经让第三方站点成功执行握手,但是,没有检索任何属性值,也没有错误,即使在日志中也没有。
PowerSchool的Open ID SSO(单点登录)目前仅在从PowerSchool的网站发起请求时才有效。因此,从创建开放 ID 链接插件开始。
单点登录链接插件
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://plugin.powerschool.pearson.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation='http://plugin.powerschool.pearson.com plugin.xsd'
name="Insert Your PluginsName"
version="1.0.0"
description="Insert a description here">
<!-- The host name without scheme i.e., https. This is the host with which PowerSchool will perform the handshake -->
<!-- and will pass the attributes to. -->
<!-- NOTE: This host must have a valid SSL for this to work. -->
<openid host="www.myopenid.com">
<links>
<link display-text="Insert links display text here"
title="Insert links title here"
path="/openidlogin">
<!-- The relative path to the hostname Open ID initiation is performed on the host specified above i.e., -->
<!-- www.myopenid.com/openidlogin -->
<ui_contexts>
<!-- You may add other user contexts too i.e., guardian etc -->
<ui_context id="admin.header" />
<ui_context id="admin.left_nav" />
</ui_contexts>
</link>
</links>
</openid>
<publisher name="XYZ">
<contact email="xyzAtmyopenId.com"/>
</publisher>
</plugin>
- 将上述内容另存为 XML 文件。
- 转到管理站点,即
xyzps.com/admin/home.html
导航到系统 -> 系统设置 -> 插件管理配置 ->安装 -> - 安装插件 -> 启用插件。
- 该插件现在应该在ui_contexts中提供的上下文中可见,即管理员标头和左侧导航。
光开放ID
转到LightOpenID并将其添加到您的项目中。
使用PowerSchool和属性请求进行身份验证
在 openid 主机插件中提到的路径上,即/openidlogin
添加所需的属性并重定向到身份验证 URL:
$openid = new LightOpenID("Insert hostname i.e., www.myopenid.com");
$openid->identity = $_GET['openid_identifier'];
$openid->required = array(
'email'=>'http://powerschool.com/entity/email'
);
$openid->returnUrl = 'Insert SSL enabled hostname i.e., https://www.myopenid.com/authenticateopenid';
header('Location: ' . $openid->authUrl());
自定义 LightOpenID
在继续之前,我们需要修改 LightOpenID,因为它在属性前面加上http://axschema.org/
,因此不会返回任何属性值。为此:
导航到
LightOpenID.php
->axParams()
并更改$this->aliases[$alias] = 'http://axschema.org/' . $field;
自
$this->aliases[$alias] = $field;
导航到
LightOpenID.php
->getAxAttributes()
并更改$key = substr($this->getItem($prefix . '_type_' . $key), $length);
自
$key = $this->getItem($prefix . '_type_' . $key);
验证和检索用户的属性
在 Open ID 的返回 URL 中指定的路径上,即authenticateopenid
,验证用户并检索其属性:
$openid = new LightOpenID("Insert hostname i.e., www.myopenid.com");
if ($openid->mode)
{
if ($openid->mode == 'cancel') {
echo "User has canceled authentication !";
} elseif ($openid->validate()) {
$data = $openid->getAttributes();
$email = $data['http://powerschool.com/entity/email'];
echo "</br>Email: " . $email . "</br>";
}
else {
echo "The user has not logged in";
}
}
else {
echo "Go to PowerSchool to log in.";
}