Аутентификация и авторизация с использованием Auth0 в PHP
Russian (Pусский) translation by Dima (you can also view the original English article)
В этой статье мы рассмотрим сервис Auth0, который обеспечивает аутентификацию и авторизацию в качестве службы. Auth0 позволяет мгновенно настраивать основные функции проверки подлинности и авторизации для ваших приложений.
Что такое Auth0?
Auth0 - это аутентификация как служебный инструмент, который упрощает реализацию функций, связанных с проверкой подлинности на вашем сайте. Если вы создали приложение и хотите просто передать функции аутентификации и авторизации, такой сервис, как Auth0, вы должны рассмотреть.
Позвольте мне кратко изложить, что Auth0 может предложить:
- единый вход в систему
- многофакторная аутентификация
- вход в систему без пароля
- Управление пользователями
- и многое другое
В этой статье мы рассмотрим несколько методов единого входа, которые вы можете реализовать в своих веб-приложениях, чтобы использовать функции аутентификации, предоставляемые службой Auth0.
В первой половине статьи мы рассмотрим, как настроить базовую функцию аутентификации в веб-приложении на стороне сервера. Во второй половине я объясню, как вы можете защитить свои пользовательские API, установив авторизацию OAuth с помощью службы Auth0.
Интеграция аутентификации на стороне сервера
В этом разделе мы рассмотрим, как можно быстро настроить базовую аутентификацию для серверных веб-приложений с использованием Auth0. Фактически команда Auth0 уже предоставляет удобный пример GitHub, который демонстрирует основные примеры, поэтому мы будем использовать это вместо того, чтобы изобретать колесо.
Прежде чем двигаться вперед, обязательно установите Composer, поскольку он будет использоваться для установки фактических SDK Auth0 с использованием файла composer.json. Кроме того, если вы хотите следовать вместе с примерами в этой статье, продолжайте и получите бесплатную учетную запись с Auth0.
Настройка проекта
Давайте двигаться вперед и захватим копию образцов проекта.
1 |
git clone https://github.com/auth0-samples/auth0-php-web-app.git . |
Для установки зависимостей выполните команду composer install.
1 |
cd 00-Starter-Seed
|
2 |
composer install
|
Согласно файлу composer.json, он должен был установить пакеты vlucas/phpdotenv и auth0/auth0-php.
1 |
{
|
2 |
"name": "auth0/basic-webapp-sample", |
3 |
"description": "Basic sample for securing a WebApp with Auth0", |
4 |
"require": { |
5 |
"vlucas/phpdotenv": "2.4.0", |
6 |
"auth0/auth0-php": "~5.0" |
7 |
},
|
8 |
"license": "MIT", |
9 |
"authors": [ |
10 |
{
|
11 |
"name": "Martin Gontovnikas", |
12 |
"email": "martin@gon.to" |
13 |
},
|
14 |
{
|
15 |
"name": "Germán Lena", |
16 |
"email": "german.lena@gmail.com" |
17 |
}
|
18 |
]
|
19 |
}
|
Библиотека vlucas/phpdotenv используется для инициализации переменных среды из файла .env. Таким образом, он позволяет отделить конфигурацию от кода, который изменяется между средами.
С другой стороны, пакет auth0/auth0-php является тем, который поможет нам настроить авторизацию в нашем приложении.
Далее, давайте настроим конфигурацию нашего приложения в файле .env. Идем дальше и создаем файл .env, копируя его из файла .env.example.
1 |
cp .env.example .env
|
Он содержит значения конфигурации, которые будут использоваться библиотекой Auth0.
1 |
AUTH0_CLIENT_ID={CLIENT_ID}
|
2 |
AUTH0_DOMAIN={DOMAIN_NAME}
|
3 |
AUTH0_CLIENT_SECRET={CLIENT_SECRET}
|
4 |
AUTH0_CALLBACK_URL={CALLBACK_URL}
|
5 |
AUTH0_AUDIENCE= |
Вы должны найти большинство настроек в разделе Приложения> Стандартное приложение> Настройки на панели управления Auth0. Обратите внимание, что я использую приложение по умолчанию, созданное системой. Конечно, вы можете пойти и создать новое приложение, если хотите это сделать.
AUTH0_CALLBACK_URL - это URL вашего приложения, в котором Auth0 будет перенаправлять пользователей после входа в систему и выхода из системы. Значение, заданное в этом поле, должно быть настроено в разделе «Разрешенные обратные вызовы» в настройках приложения на панели управления Auth0.
Вы найдете три основных файла, реализующих большую часть логики аутентификации.
- index.php: Это основная страница, на которой отображается кнопка входа или выхода из системы на основе состояния пользователя.
- login.php: этот скрипт будет инициирован, когда вы нажмете кнопку входа в систему, и перенаправит пользователей на интерфейс входа Auth0 для входа. После входа в систему они будут перенаправлены обратно на
AUTH0_CALLBACK_URL. - logout.php: этот скрипт будет инициирован, когда вы нажмете кнопку выхода из системы, и перенаправит пользователей на Auth0 в фоновом режиме, выйдет из системы и вернет их обратно на
AUTH0_CALLBACK_URL.
Файлы проекта
Давайте быстро рассмотрим каждый файл в стартовом проекте.
Login-Script
Мы начнем с файла login.php.
1 |
<?php
|
2 |
require __DIR__ . '/vendor/autoload.php'; |
3 |
require __DIR__ . '/dotenv-loader.php'; |
4 |
|
5 |
use Auth0\SDK\Auth0; |
6 |
|
7 |
$domain = getenv('AUTH0_DOMAIN'); |
8 |
$client_id = getenv('AUTH0_CLIENT_ID'); |
9 |
$client_secret = getenv('AUTH0_CLIENT_SECRET'); |
10 |
$redirect_uri = getenv('AUTH0_CALLBACK_URL'); |
11 |
$audience = getenv('AUTH0_AUDIENCE'); |
12 |
|
13 |
if($audience == ''){ |
14 |
$audience = 'https://' . $domain . '/userinfo'; |
15 |
}
|
16 |
|
17 |
$auth0 = new Auth0([ |
18 |
'domain' => $domain, |
19 |
'client_id' => $client_id, |
20 |
'client_secret' => $client_secret, |
21 |
'redirect_uri' => $redirect_uri, |
22 |
'audience' => $audience, |
23 |
'scope' => 'openid profile', |
24 |
'persist_id_token' => true, |
25 |
'persist_access_token' => true, |
26 |
'persist_refresh_token' => true, |
27 |
]);
|
28 |
|
29 |
$auth0->login(); |
Вначале мы включили автозагрузчики, которые отвечают за загрузку классов, связанных с переменной Auth0 и средой. После этого мы инициализируем конфигурационные переменные из файла .env, используя функцию getenv.
Затем мы создаем экземпляр объекта Auth0 и вызываем метод входа, который перенаправляет пользователей на Auth0 для входа. После входа в систему пользователи будут перенаправлены на наш сайт.
Вы можете войти в систему, используя свои социальные учетные записи, такие как Facebook, Google и т. д., Или создать новую учетную запись при входе в систему. В любом случае Auth0 создаст записи для новых пользователей на своем конце. Вы можете включить различные социальные входы в разделе «Подключения»> «Социальные» на панели управления Auth0. Кроме того, вы можете проверить список пользователей, которые вошли в систему, используя Auth0 на панели управления Auth0 в разделе «Пользователи».
Сценарий выхода
Затем давайте быстро взглянем на файл logout.php.
1 |
<?php
|
2 |
require __DIR__ . '/vendor/autoload.php'; |
3 |
require __DIR__ . '/dotenv-loader.php'; |
4 |
use Auth0\SDK\Auth0; |
5 |
|
6 |
$domain = getenv('AUTH0_DOMAIN'); |
7 |
$client_id = getenv('AUTH0_CLIENT_ID'); |
8 |
$client_secret = getenv('AUTH0_CLIENT_SECRET'); |
9 |
$redirect_uri = getenv('AUTH0_CALLBACK_URL'); |
10 |
$audience = getenv('AUTH0_AUDIENCE'); |
11 |
|
12 |
if($audience == ''){ |
13 |
$audience = 'https://' . $domain . '/userinfo'; |
14 |
}
|
15 |
|
16 |
$auth0 = new Auth0([ |
17 |
'domain' => $domain, |
18 |
'client_id' => $client_id, |
19 |
'client_secret' => $client_secret, |
20 |
'redirect_uri' => $redirect_uri, |
21 |
'audience' => $audience, |
22 |
'scope' => 'openid profile', |
23 |
'persist_id_token' => true, |
24 |
'persist_refresh_token' => true, |
25 |
]);
|
26 |
|
27 |
$auth0->logout(); |
28 |
$return_to = 'https://' . $_SERVER['HTTP_HOST']; |
29 |
$logout_url = sprintf('http://%s/v2/logout?client_id=%s&returnTo=%s', $domain, $client_id, $return_to); |
30 |
header('Location: ' . $logout_url); |
31 |
die(); |
Это работает почти так же, как и файл login.php, за исключением того, что он будет вызываться, когда пользователи выходят из системы. logout метода вызывается для истечения сеанса пользователя в вашем приложении. После этого пользователь будет перенаправлен на Auth0, чтобы служба была проинформирована о активности выхода пользователя. Наконец, пользователь будет перенаправлен обратно в ваше приложение.
Индексный файл
Наконец, давайте рассмотрим файл index.php, который является точкой входа нашего приложения.
1 |
<?php
|
2 |
// Require composer autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
4 |
require __DIR__ . '/dotenv-loader.php'; |
5 |
use Auth0\SDK\Auth0; |
6 |
$domain = getenv('AUTH0_DOMAIN'); |
7 |
$client_id = getenv('AUTH0_CLIENT_ID'); |
8 |
$client_secret = getenv('AUTH0_CLIENT_SECRET'); |
9 |
$redirect_uri = getenv('AUTH0_CALLBACK_URL'); |
10 |
$audience = getenv('AUTH0_AUDIENCE'); |
11 |
if($audience == ''){ |
12 |
$audience = 'https://' . $domain . '/userinfo'; |
13 |
}
|
14 |
$auth0 = new Auth0([ |
15 |
'domain' => $domain, |
16 |
'client_id' => $client_id, |
17 |
'client_secret' => $client_secret, |
18 |
'redirect_uri' => $redirect_uri, |
19 |
'audience' => $audience, |
20 |
'scope' => 'openid profile', |
21 |
'persist_id_token' => true, |
22 |
'persist_access_token' => true, |
23 |
'persist_refresh_token' => true, |
24 |
]);
|
25 |
$userInfo = $auth0->getUser(); |
26 |
?>
|
27 |
<html>
|
28 |
<head>
|
29 |
<script src="http://code.jquery.com/jquery-3.1.0.min.js" type="text/javascript"></script> |
30 |
|
31 |
<meta name="viewport" content="width=device-width, initial-scale=1"> |
32 |
|
33 |
<!-- font awesome from BootstrapCDN -->
|
34 |
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"> |
35 |
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"> |
36 |
|
37 |
<link href="public/app.css" rel="stylesheet"> |
38 |
</head>
|
39 |
<body class="home"> |
40 |
<div class="container"> |
41 |
<div class="login-page clearfix"> |
42 |
<?php if(!$userInfo): ?> |
43 |
<div class="login-box auth0-box before"> |
44 |
<img src="https://i.cloudup.com/StzWWrY34s.png" /> |
45 |
<h3>Auth0 Example</h3> |
46 |
<p>Zero friction identity infrastructure, built for developers</p> |
47 |
<a class="btn btn-primary btn-lg btn-login btn-block" href="login.php">Sign In</a> |
48 |
</div>
|
49 |
<?php else: ?> |
50 |
<div class="logged-in-box auth0-box logged-in"> |
51 |
<h1 id="logo"><img src="//cdn.auth0.com/samples/auth0_logo_final_blue_RGB.png" /></h1> |
52 |
<img class="avatar" src="<?php echo $userInfo['picture'] ?>"/> |
53 |
<h2>Welcome <span class="nickname"><?php echo $userInfo['nickname'] ?></span></h2> |
54 |
<a class="btn btn-warning btn-logout" href="/logout.php">Logout</a> |
55 |
</div>
|
56 |
<?php endif ?> |
57 |
</div>
|
58 |
</div>
|
59 |
</body>
|
60 |
</html>
|
Здесь мы использовали метод getUser объекта $auth0, чтобы узнать, есть ли какой-либо активный сеанс. Если активного сеанса нет, мы отобразим ссылку «Вход», которая приведет пользователя к login.php и инициирует поток входа. С другой стороны, мы приветствуем пользователя и показываем ссылку «Выход», если пользователь уже вошел в систему.
Таким образом, это была реализация базового потока аутентификации для серверных приложений.
Защитите свои пользовательские API с помощью OAuth2
В этом разделе мы рассмотрим, как вы можете защитить свои пользовательские API, выполнив поток предоставления кода авторизации OAuth2. Надеюсь, вы знакомы со стандартным потоком предоставления кода авторизации, так как мы не будем вдаваться в подробности этого. Ознакомьтесь с некоторыми нашими другими сообщениями здесь, на Envato Tuts +, если вы хотите ускориться с OAuth2.



OAuth 2.0 - The Good, The Bad & The Ugly



Как проверить подлинность пользователей с Twitter OAuth 2.0
Вместо этого мы сразу же погрузимся в реальную реализацию. Идем дальше и создаем файл auth_code_grant_example.php со следующим содержимым.
1 |
<?php
|
2 |
session_start(); |
3 |
|
4 |
if (!isset($_GET['code'])) { |
5 |
// Check if we need to show the "Sign In" link
|
6 |
$params = array ( |
7 |
'audience' => '{AUDIENCE}', |
8 |
'scope' => 'profile', |
9 |
'response_type' => 'code', |
10 |
'client_id' => '{CLIENT_ID}', |
11 |
'state' => 'SomeRandomString', |
12 |
'redirect_uri' => '{CALLBACK_URL}' |
13 |
);
|
14 |
|
15 |
$_SESSION['oauth2state']=$params['state']; |
16 |
$str_params = ''; |
17 |
foreach($params as $key=>$value) { |
18 |
$str_params .= $key . "=" . urlencode($value) . "&"; |
19 |
}
|
20 |
?>
|
21 |
|
22 |
<a href="https://{AUTH0_DOMAIN}/authorize?<?php echo $str_params;?>"> |
23 |
Sign In |
24 |
</a>
|
25 |
<?php
|
26 |
} elseif (empty($_GET['state']) || (isset($_SESSION['oauth2state']) && $_GET['state'] !== $_SESSION['oauth2state'])) { |
27 |
// If the "state" var is present in the $_GET, let's validate it
|
28 |
if (isset($_SESSION['oauth2state'])) { |
29 |
unset($_SESSION['oauth2state']); |
30 |
}
|
31 |
|
32 |
exit('Invalid state'); |
33 |
|
34 |
} elseif(isset($_GET['code']) && !empty($_GET['code'])) { |
35 |
// If the auth "code" is present in the $_GET
|
36 |
// let's exchange it for the access token
|
37 |
$params = array ( |
38 |
'grant_type' => 'authorization_code', |
39 |
'client_id' => '{CLIENT_ID}', |
40 |
'client_secret' => '{CLIENT_SECRET}', |
41 |
'code' => $_GET['code'], |
42 |
'redirect_uri' => '{CALLBACK_URL}' |
43 |
);
|
44 |
|
45 |
$str_params = ''; |
46 |
foreach($params as $key=>$value) { |
47 |
$str_params .= $key . "=" . urlencode($value) . "&"; |
48 |
}
|
49 |
|
50 |
$curl = curl_init(); |
51 |
|
52 |
curl_setopt_array($curl, array( |
53 |
CURLOPT_URL => "https://{AUTH0_DOMAIN}/oauth/token", |
54 |
CURLOPT_RETURNTRANSFER => true, |
55 |
CURLOPT_CUSTOMREQUEST => "POST", |
56 |
CURLOPT_POSTFIELDS => $str_params |
57 |
));
|
58 |
|
59 |
$curl_response = curl_exec($curl); |
60 |
$curl_error = curl_error($curl); |
61 |
|
62 |
curl_close($curl); |
63 |
|
64 |
if ($curl_error) { |
65 |
echo "Error in the CURL response:" . $curl_error; |
66 |
} else { |
67 |
$arr_json_data = json_decode($curl_response); |
68 |
|
69 |
if (isset($arr_json_data->access_token)) { |
70 |
$access_token = $arr_json_data->access_token; |
71 |
$curl = curl_init(); |
72 |
|
73 |
curl_setopt_array($curl, array( |
74 |
CURLOPT_URL => "http://{YOUR_API_DOMAIN}/demo_api_server.php", |
75 |
CURLOPT_RETURNTRANSFER => true, |
76 |
CURLOPT_CUSTOMREQUEST => "GET", |
77 |
CURLOPT_HTTPHEADER => array( |
78 |
"Authorization: Bearer {$access_token}" |
79 |
)
|
80 |
));
|
81 |
|
82 |
$curl_response = curl_exec($curl); |
83 |
$curl_error = curl_error($curl); |
84 |
|
85 |
curl_close($curl); |
86 |
|
87 |
if ($curl_error) { |
88 |
echo "Error in the CURL response from DEMO API:" . $curl_error; |
89 |
} else { |
90 |
echo "Demo API Response:" . $curl_response; |
91 |
}
|
92 |
} else { |
93 |
echo 'Invalid response, no access token was found.'; |
94 |
}
|
95 |
}
|
96 |
}
|
Давайте посмотрим, как работает этот код!
Давайте посмотрим, как работает этот код!
Сначала мы подготовили ссылку, которая отправляет пользователя на сервер Auth0, чтобы начать поток авторизации.
1 |
// Check if we need to show the "Sign In" link
|
2 |
$params = array ( |
3 |
'audience' => '{AUDIENCE}', |
4 |
'scope' => 'profile', |
5 |
'response_type' => 'code', |
6 |
'client_id' => '{CLIENT_ID}', |
7 |
'state' => '{SOME_RANDOM_STRING}', |
8 |
'redirect_uri' => '{CALLBACK_URL}' |
9 |
);
|
10 |
|
11 |
$_SESSION['oauth2state']=$params['state']; |
12 |
$str_params = ''; |
13 |
foreach($params as $key=>$value) { |
14 |
$str_params .= $key . "=" . urlencode($value) . "&"; |
15 |
}
|
16 |
?>
|
17 |
|
18 |
<a href="https://{AUTH0_DOMAIN}/authorize?<?php echo $str_params;?>"> |
19 |
Sign In |
20 |
</a>
|
Пожалуйста, замените {AUDIENCE}, {CLIENT_ID} и {CALLBACK_URL} на значения, соответствующие вашему приложению. Параметр {AUDIENCE} должен быть заменен значением поля Идентификатор, найденным в API> {YOUR API APPLICATION}> Настройки на панели управления Auth0.
{SOME_RANDOM_STRING} следует заменить уникальным значением, которое трудно угадать. Эта строка используется для предотвращения атак CSRF. Кроме того, не забудьте заменить {AUTH0_DOMAIN} своим доменным именем, как мы обсуждали ранее.
Получение маркера доступа
Когда пользователь нажимает на ссылку «Вход», они будут отправлены на сервер Auth0 для аутентификации. После аутентификации им будет предложено разрешить приложению доступ к вашему профилю. После авторизации пользователь будет перенаправлен обратно в ваше приложение с кодом в качестве параметра $ _GET.
Затем мы можем обменять этот код, чтобы получить токен доступа.
1 |
// If the auth "code" is present in the $_GET
|
2 |
// let's exchange it for the access token
|
3 |
$params = array ( |
4 |
'grant_type' => 'authorization_code', |
5 |
'client_id' => '{CLIENT_ID}', |
6 |
'client_secret' => '{CLIENT_SECRET}', |
7 |
'code' => $_GET['code'], |
8 |
'redirect_uri' => '{CALLBACK_URL}' |
9 |
);
|
10 |
|
11 |
$str_params = ''; |
12 |
foreach($params as $key=>$value) { |
13 |
$str_params .= $key . "=" . urlencode($value) . "&"; |
14 |
}
|
15 |
|
16 |
$curl = curl_init(); |
17 |
$curl_response = curl_exec($curl); |
18 |
|
19 |
curl_setopt_array($curl, array( |
20 |
CURLOPT_URL => "https://{AUTH0_DOMAIN}/oauth/token", |
21 |
CURLOPT_RETURNTRANSFER => true, |
22 |
CURLOPT_CUSTOMREQUEST => "POST", |
23 |
CURLOPT_POSTFIELDS => $str_params |
24 |
));
|
Как вы можете видеть, для получения маркера доступа требуется один вызов CURL.
Вызов конечной точки пользовательского API
После того, как у вас есть токен доступа, вы можете вызвать свою конечную точку API, включив ее в заголовок.
1 |
$access_token = $arr_json_data->access_token; |
2 |
$curl = curl_init(); |
3 |
|
4 |
curl_setopt_array($curl, array( |
5 |
CURLOPT_URL => "http://{YOUR_API_DOMAIN}/demo_api_server.php", |
6 |
CURLOPT_RETURNTRANSFER => true, |
7 |
CURLOPT_CUSTOMREQUEST => "GET", |
8 |
CURLOPT_HTTPHEADER => array( |
9 |
"Authorization: Bearer {$access_token}" |
10 |
)
|
11 |
));
|
12 |
|
13 |
$curl_response = curl_exec($curl); |
14 |
$curl_error = curl_error($curl); |
15 |
|
16 |
curl_close($curl); |
17 |
|
18 |
if ($curl_error) { |
19 |
echo "Error in the CURL response from DEMO API:" . $curl_error; |
20 |
} else { |
21 |
echo "Demo API Response:" . $curl_response; |
22 |
}
|
Конечная точка API с защитой Auth0
Файл фиктивного файла API demo_api_server.php может выглядеть примерно так:
1 |
<?php
|
2 |
// Require composer autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
4 |
|
5 |
use Auth0\SDK\JWTVerifier; |
6 |
|
7 |
try { |
8 |
$verifier = new JWTVerifier([ |
9 |
'supported_algs' => ['{HASHING_ALGORITHM}'], |
10 |
'valid_audiences' => ['{AUDIENCE}'], |
11 |
'authorized_iss' => ['{DOMAIN}'] |
12 |
]);
|
13 |
|
14 |
$access_token = getBearerToken(); |
15 |
$token_info = $verifier->verifyAndDecode($access_token); |
16 |
|
17 |
echo json_encode(array('date'=>'API Resource Data!!')); |
18 |
}
|
19 |
catch(\Auth0\SDK\Exception\CoreException $e) { |
20 |
throw $e; |
21 |
echo json_encode(array('error'=>$e->getMessage())); |
22 |
}
|
23 |
|
24 |
function getAuthorizationHeader() { |
25 |
$headers = null; |
26 |
|
27 |
if (isset($_SERVER['Authorization'])) { |
28 |
$headers = trim($_SERVER["Authorization"]); |
29 |
}
|
30 |
else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI |
31 |
$headers = trim($_SERVER["HTTP_AUTHORIZATION"]); |
32 |
} elseif (function_exists('apache_request_headers')) { |
33 |
$requestHeaders = apache_request_headers(); |
34 |
// Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
|
35 |
$requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders)); |
36 |
//print_r($requestHeaders);
|
37 |
if (isset($requestHeaders['Authorization'])) { |
38 |
$headers = trim($requestHeaders['Authorization']); |
39 |
}
|
40 |
}
|
41 |
return $headers; |
42 |
}
|
43 |
|
44 |
function getBearerToken() { |
45 |
$headers = getAuthorizationHeader(); |
46 |
|
47 |
// HEADER: Get the access token from the header
|
48 |
if (!empty($headers)) { |
49 |
if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) { |
50 |
return $matches[1]; |
51 |
}
|
52 |
}
|
53 |
return null; |
54 |
}
|
Давайте быстро рассмотрим важные части этого кода.
Проверка маркера доступа
Вы обязаны проверять токен доступа, прежде чем предоставлять доступ к защищенному ресурсу. И это именно то, что мы сделали в следующем фрагменте. Мы использовали класс утилиты JWTVerifier для проверки токена доступа.
1 |
try { |
2 |
$verifier = new JWTVerifier([ |
3 |
'supported_algs' => ['{SIGNING_ALGORITHM}'], |
4 |
'valid_audiences' => ['{AUDIENCE}'], |
5 |
'authorized_iss' => ['{DOMAIN}'] |
6 |
]);
|
7 |
|
8 |
$access_token = getBearerToken(); |
9 |
$token_info = $verifier->verifyAndDecode($access_token); |
10 |
|
11 |
echo json_encode(array('date'=>'API Resource Data!!')); |
12 |
}
|
13 |
catch(\Auth0\SDK\Exception\CoreException $e) { |
14 |
throw $e; |
15 |
echo json_encode(array('error'=>$e->getMessage())); |
16 |
}
|
{SIGNING_ALGORITHM} следует заменить значением поля Signing Algorithm, найденным в API> {YOUR API APPLICATION}> Settings.
Таким образом, вы можете защитить свои пользовательские API, если хотите использовать поток OAuth2 в службе Auth0.
Заключение
Сегодня мы прошли через службу Auth0, которая обеспечивает аутентификацию и авторизацию в качестве службы. После введения службы Auth0 мы рассмотрели несколько практических примеров, чтобы продемонстрировать, как вы могли бы интегрировать их с вашими PHP-приложениями.
Пожалуйста, не стесняйтесь размещать свои предложения и запросы, используя приведенный ниже канал!



