哇哦,经过 4 周的搜索、测试和调试,我终于在 ADFS4.0(AD FS 2019 服务器)上恢复了组;
文档完全是废话,所以,你们去吧。非常感谢@Max Fahl
- 创建服务器应用程序
- 创建 Web API
- 将步骤 1 中的客户端 ID 添加为 Web API 中的“信赖方标识符”
- 创建 Max 描述的 3 条规则(Web API)
- 在 Claims Permissions (Web API) 中检查“Allatclaims、openid、profile”
现在您可以使用 oAuth 通过 ADFS 对用户进行身份验证。
确保你使用这个;
//Store state in session
$state = uniqid("adfs-oauth");
$params = [
"client_id" => $this->adfs_config["client_id"],
"response_type" => "code",
"redirect_uri" => $this->adfs_config["redirect_uri"],
"state" => $state,
"response_mode" => "form_post",
];
然后将代码换成访问令牌;
"client_id" => $this->adfs_config["client_id"],
"client_secret" => $this->adfs_config["client_secret"],
"redirect_uri" => $this->adfs_config["redirect_uri"],
"grant_type" => "authorization_code",
"code" => $request->get("code")
现在您会收到访问令牌、刷新令牌和 ID_Token。
示例:
ABCDABCDABCDABCDABCDABCDABCDABCD.ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD.ABCDABCDABCDABCDABCDABCD
用 '.' 分割 Token (点)。你现在有 3 个部分。第二部分保存信息(索引 1)。 Base 64 解码此字符串,您将获得 JSON 数据。
array (
'aud' => '53a****-8a5e-415b-**e4-37****65edd5',
'iss' => 'https://*******.northeurope.cloudapp.azure.com/adfs',
'iat' => 1623407419,
'nbf' => 1623407419,
'exp' => 1623411019,
'auth_time' => 1623397846,
'sub' => '**********************',
'upn' => 'developer@developer.com',
'unique_name' => 'ADFS_DOMAIN\\developer',
'sid' => 'S-1-5-21-******-3146660372-******-1112',
'Roles' =>
array (
0 => 'Legal',
1 => 'Administrator',
2 => 'Users',
),
'apptype' => 'Confidential',
'appid' => '53a****-8a5e-415b-**e4-37****65edd5',
'authmethod' => 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport',
'ver' => '1.0',
)