Rumah >pembangunan bahagian belakang >tutorial php >OAuth dalam PHP: Membina penyelesaian SSO berbilang platform

OAuth dalam PHP: Membina penyelesaian SSO berbilang platform

WBOY
WBOYasal
2023-07-28 21:38:21785semak imbas

OAuth dalam PHP: Membina Penyelesaian SSO Berbilang Platform

Dengan perkembangan pesat Internet, ia telah menjadi kebiasaan bagi orang ramai untuk menggunakan pelbagai aplikasi dalam pelbagai platform. Ini menimbulkan persoalan: Bagaimana untuk melaksanakan log masuk tunggal (SSO) antara platform yang berbeza? OAuth (Keizinan Terbuka) telah menjadi pilihan terbaik untuk menyelesaikan masalah ini.

OAuth ialah standard terbuka yang membolehkan pengguna membenarkan aplikasi pihak ketiga mengakses sumber Internet mereka tanpa berkongsi bukti kelayakan mereka. OAuth boleh digunakan untuk membina penyelesaian SSO berbilang platform Pengguna hanya perlu log masuk sekali pada satu platform untuk log masuk secara automatik pada platform lain.

Dalam artikel ini, kami akan memperkenalkan cara melaksanakan OAuth menggunakan PHP dan membina penyelesaian SSO berbilang platform yang mudah.

Pertama, kami perlu menyediakan klien OAuth aplikasi pada setiap platform. Katakan kita mempunyai dua platform: Platform A dan Platform B. Pada platform A, kami akan menyediakan klien OAuth untuk berkomunikasi dengan platform B. Kami menggunakan sambungan oauth PHP untuk melaksanakan fungsi klien OAuth. oauth扩展来实现OAuth的客户端功能。

首先,我们需要在平台A上注册一个应用程序,并获取客户端ID和客户端密钥。这些凭据将用于在平台B上进行授权请求。

接下来,我们将创建一个名为oauth.php的PHP文件,用于处理与平台B的OAuth认证过程。首先,我们需要在oauth.php中引入oauth扩展:

<?php
require_once 'OAuth/OAuth.php';
?>

然后,我们需要设置平台B的认证终端点URL和我们在平台A上注册的OAuth客户端凭据:

<?php
define('AUTH_URL', 'https://platform-b.com/oauth/authorize');
define('CLIENT_ID', 'YOUR_CLIENT_ID');
define('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');
?>

接下来,我们需要定义一个函数,用于生成OAuth授权URL。该函数将接收重定向URL作为参数,并向平台B发送OAuth授权请求。

<?php
function generate_auth_url($redirect_url) {
    $oauth = new OAuth(CLIENT_ID, CLIENT_SECRET);
    $request_token = $oauth->getRequestToken(AUTH_URL, $redirect_url);
    $auth_url = $oauth->getAuthorizeURL($request_token['token']);
    return $auth_url;
}
?>

在平台A的登录页面中,我们可以使用generate_auth_url函数来生成授权URL,并将用户重定向到该URL:

<?php
$redirect_url = 'https://platform-a.com/callback.php';
$auth_url = generate_auth_url($redirect_url);

header('Location: ' . $auth_url);
exit();
?>

callback.php

Pertama, kita perlu mendaftarkan permohonan di platform A dan mendapatkan ID pelanggan dan kunci pelanggan. Bukti kelayakan ini akan digunakan untuk membuat permintaan kebenaran pada Platform B.

Seterusnya, kami akan mencipta fail PHP bernama oauth.php untuk mengendalikan proses pengesahan OAuth dengan Platform B. Mula-mula, kita perlu memperkenalkan sambungan oauth dalam oauth.php:

<?php
$oauth = new OAuth(CLIENT_ID, CLIENT_SECRET);
$access_token = $oauth->getAccessToken($_GET['code']);
$access_token_secret = $access_token['oauth_token_secret'];

// 将获取到的令牌保存在数据库或其他存储介质中
save_access_token($access_token);
?>

Kemudian, kita perlu menetapkan URL titik akhir pengesahan platform B dan yang kami daftarkan kelayakan pelanggan OAuth platform A:

<?php
$oauth = new OAuth(CLIENT_ID, CLIENT_SECRET);
$access_token = get_access_token_from_database();

$oauth->setToken($access_token['oauth_token'], $access_token['oauth_token_secret']);
$response = $oauth->fetch('https://platform-b.com/api/userInfo');
$user_info = json_decode($response['response'], true);

// 处理用户信息
process_user_info($user_info);
?>

Seterusnya, kita perlu menentukan fungsi yang menjana URL kebenaran OAuth. Fungsi ini akan menerima URL ubah hala sebagai parameter dan menghantar permintaan kebenaran OAuth ke Platform B.

<?php
$oauth = new OAuth(CLIENT_ID, CLIENT_SECRET);
$access_token = get_access_token_from_database();

$oauth->setToken($access_token['oauth_token'], $access_token['oauth_token_secret']);

// 验证访问令牌
if ($oauth->fetch('https://platform-b.com/api/verifyToken')['response'] == 'OK') {
    // 获取用户信息
    $user_info = get_user_info();
    // 返回用户信息
    echo json_encode($user_info);
}
?>

Dalam halaman log masuk platform A, kita boleh menggunakan fungsi generate_auth_url untuk menjana URL kebenaran dan mengubah hala pengguna ke URL ini:

rrreee🎜Dalam callback.phpDalam fail, kami akan mengendalikan panggilan balik pengesahan platform B. Semasa mendapatkan kod kebenaran, kami juga perlu mendapatkan token akses untuk akses seterusnya kepada sumber platform B. 🎜rrreee🎜Di halaman lain platform A, kami boleh menggunakan token akses yang disimpan untuk mengakses API platform B dan mendapatkan maklumat berkaitan pengguna. 🎜rrreee🎜Dalam API platform B, kami boleh menggunakan token akses yang diperoleh untuk mengesahkan identiti pengguna dan mengembalikan maklumat sumber yang sepadan. 🎜rrreee🎜Melalui langkah di atas, kami berjaya melaksanakan penyelesaian SSO berbilang platform berdasarkan OAuth menggunakan PHP. Pengguna hanya perlu log masuk sekali pada platform A untuk log masuk secara automatik pada platform B dan berkongsi maklumat berkaitan pengguna. 🎜🎜Ringkasan: 🎜Artikel ini menerangkan cara melaksanakan OAuth menggunakan PHP dan membina penyelesaian SSO berbilang platform yang mudah. Dengan menggunakan OAuth, kami boleh mencapai log masuk tunggal antara platform yang berbeza, meningkatkan pengalaman pengguna dan memudahkan kerja pembangunan. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca! 🎜

Atas ialah kandungan terperinci OAuth dalam PHP: Membina penyelesaian SSO berbilang platform. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn