OKTAとJWTを使用してLaravel 5.4 APIを保護するソリューションをまとめようとしています。私はOKTAを介して私のアプリケーションにログインし、access_tokenとid_tokenを取得するSPAを持っています。また、これを 'Authorization'を使用しているヘッダーのAPI呼び出しに渡します:Bearer ${accessToken}
今、私はLaravelバックエンド内のOKTAでこのアクセストークンを検証するソリューションを見つけるのに苦労しています。 tymon/jwt-authを見ていますが、トークンをverifiyするカスタムソリューションを追加する方法はありませんが、okta/jwt-verifierを使用して誰でもサンプル/ガイドを使用できますか? laravel/socialiteとsocialiteproviders/oktaも見ていますが、これはSPAではなく従来のバックエンドログインに関するものですOtaaとJWTでlaravel apiサービスを保護
0
A
答えて
0
私たちのokta/jwt-verifier
図書館はあなたを助けてくれるはずです。ベアラトークンに基づいてリクエストをキャプチャして認可するカスタムミドルウェアソリューションを作成する必要があります。ミドルウェアを設定したら、検証者ライブラリの内部で、次のコマンドを実行してaccessTokenを確認できます。
$jwtVerifier = (new \Okta\JwtVerifier\JwtVerifierBuilder())
->setAudience('api://default')
->setClientId('{clientId}')
->setIssuer('https://{yourOktaDomain}.com/oauth2/default')
->build();
$jwt = $jwtVerifier->verify($jwt);
上記のクライアントIDとoktaドメインを変更することで、accessTokenをverifyメソッドに渡すことができます。例外が発生しない場合は、jwtが有効であるとみなしてリクエストを承認することができます。
はあなたがこの記事を見つける人のためにJWT
0
の妥当性を検証した後にアクセスを持っているものについては、github repo readmeを参照してください。 JWSを確認することができません:SPAあなたも発行者を定義することを確認してくださいでは、これは便利なスタート...
//react login
this.oktaAuth = new OktaAuth({
url: props.config.oktaUrl
,clientId:props.config.clientId
,redirectUri:props.config.redirectUri
,issuer: props.config.issuer
});
this.oktaAuth.signIn({
username: this.state.username,
password: this.state.password
})
.then((response) => {
if (response.status === 'SUCCESS') {
this.setState({
sessionToken: response.sessionToken
});
this.oktaAuth.token.getWithoutPrompt({
responseType: ['id_token', 'token']
,scopes: ['openid', 'email', 'profile']
,sessionToken: response.sessionToken
})
.then((tokenOrTokens) => {
this.setState({
tokenOrTokens: tokenOrTokens
});
window.localStorage.setItem('access_token', tokenOrTokens[1].accessToken);
})
.catch(function(err) {
console.log('err', err);
});
}
})
//api call
const accessToken = window.localStorage.getItem('access_token') || null;
const config = {
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Bearer ${accessToken}`
},
};
fetch(url, config)
.then((response) => {
...
//laravel api route
Route::group(['prefix' => 'restricted', 'middleware' => ['okta.validate']], function() {
Route::get('/getprotecteddata', '[email protected]');
});
//laravel kernel.php
protected $routeMiddleware = [
...
'okta.validate' => \App\Http\Middleware\ValidateOKTAToken::class,
];
//laravel middleware
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ValidateOKTAToken
{
public function handle($request, Closure $next)
{
$token = $this->parseAuthHeader($request);
$jwt = $this->validate($token);
\Log::info("ValidateOKTAToken jwt=" . json_encode($jwt->toJson()));
return $next($request);
}
protected function validate($token) {
$oktaClientId = env('OKTA_CLIENTID');
$oktaIssuer = env('OKTA_ISSUER');
$oktaAudience = env('OKTA_AUDIENCE');
$jwtVerifier = (new \Okta\JwtVerifier\JwtVerifierBuilder())
->setAudience($oktaAudience)
->setClientId($oktaClientId)
->setIssuer($oktaIssuer)
->build();
$jwt = $jwtVerifier->verify($token);
return $jwt;
}
protected function parseAuthHeader(Request $request, $header = 'authorization', $method = 'bearer')
{
$header = $request->headers->get($header);
if (! starts_with(strtolower($header), $method)) {
return false;
}
return trim(str_ireplace($method, '', $header));
}
}
関連する問題
- 1. Laravel API - 保護経路アクセス
- 2. Java EeでJWTでRESTサービスをセキュリティで保護する
- 3. CookieでJWTで保護されたApiを呼び出す
- 4. 残りのAPIをjwtで保護する
- 5. 認証なしのjwtでセキュリティで保護されたapiキー
- 6. keycloakでスプリングブートサービスを保護する - JWTトークン
- 7. 保護サービスとしてサービスを登録
- 8. Angular2とLaravel CSRF保護
- 9. 保護のレイヤーは何ですか?AzasのPAASサービスとIAASサービスのDDOS保護
- 10. Laravel-のDataTable保護
- 11. Laravel 5ルート保護
- 12. jwt api authentication work(dingo-laravel)
- 13. API CSRF保護
- 14. Grails:OAuth2.0でREST APIを保護
- 15. APIキーでクライアント側で使用するRESTサービスの保護
- 16. Laravelアプリケーションコードを保護する
- 17. X509Certificate2(JwtSecurityTokenHandler)でJWTをセキュリティで保護する
- 18. 休憩サービスの保護
- 19. JSON Webサービスの保護
- 20. サービスAPIを使用したHTTPエンドポイントの保護
- 21. Symfony 3 API RESTとJWTのAngular webappにCSRFトークン保護を使用すると便利ですか?
- 22. REST APIとSlim Frameworkを保護する
- 23. RESTful APIを保護する
- 24. Azure APIを保護する
- 25. 公開REST APIを保護
- 26. laravel 5.4フロントエンドとバックエンド間のゲストアクセスからAPIルートを保護する
- 27. api-keyの違法コピーからAPIサービスを保護する方法
- 28. Laravel Passport VS JWT
- 29. Laravel 5.2トークンベースの認証とJWT
- 30. 複数のAPIの保護
感謝しかし、あなたが提案どおりにやったがInvalidArgumentException取得する必要があります。ベンダー/ spomky-ラボ/ホセ/ SRC/Verifier.php中:146 oktaAuth.signInからaccessTokenを渡すのclientId、発行者など、すべての有効な – Jezer
[ { "idToken" をチェックする: "..."、 "expiresAt": .. "スコープ":[ "のOpenID"、 "電子メール" ]、 "authorizeUrl": "HTTPS:\/\/dev-XXX.oktapreview.com \ /のOAuth2 \/V1 \ /許可します" 、 "発行者": "HTTPS:\/\/dev-XXX.oktapreview.com"、 "のclientId": "..." }、{ "accessToken":」... " " expiresAt ":...、 " tokenType ":" Bearer "、 "スコープ ":[ "userize": "https:\/\/dev-XXX.oktapreview.com \/oauth2 \/v1 \/authorize"、 、 「authorizeUrl」:「openid」、 「https: \/\/dev-XXX.oktapreview.com \/oauth2 \/v1 \/userinfo " } ] – Jezer
あなたが提供したデコードされたバージョンではなく、JWTの文字列バージョンを渡す必要があります。 – bretterer