我已经浏览了一段时间才找到可行的解决方案。
我有一个 Laravel 应用程序,我在 API 路由中有一些端点。
我想使用数据而无需登录应用程序本身。如果有些身体可以引导我朝着正确的方向前进,我将不胜感激。我查看了 Passport ,但我不想在 ajax 电话中传递client_id
或client_secret
等某些信息,因为它们很容易的看到即可。
答案 0 :(得分:0)
你不能兼得。您无法保护路由,然后在不进行身份验证的情况下调用它。如果您可以访问未经身份验证的话,那么首先无需保护它。让您的生活更轻松,两次定义相同的路线。一旦进入中间件,一旦退出中间件。
Route::get('link', 'LinkController@get');
Route::group(['middleware' => 'auth:api'], function(){
Route::get('link', 'LinkController@get');
});
现在您拥有受保护和未受保护的路线。但是,正如我所说的那样,并非它实际上没有受到保护,因为任何人都可以在不进行身份验证的情况下访问它。
答案 1 :(得分:0)
这是我面对的问题的2美分方法。可能会帮助将来某人。
经过大量的研究和了解JWT如何工作,顺便说一下我还需要进一步研究才能完全理解它。但是,要获得概述,我无法找到更好的文章来解释https://scotch.io/tutorials/the-anatomy-of-a-json-web-token以外的简单字词。
现在,一旦我理解了JWT是如何工作的,我就很容易将头围绕整个流程。所以这就是我接近它的方式。在我为公司开发内部API时,我创建了一个中间件来检查对某些端点的请求是否来自白名单API,您可以从$ request-> api()轻松获取。
然后我在https://github.com/tymondesigns/jwt-auth通过tymondesigns安装了优秀的软件包。我按照安装并生成了密钥。现在这里有趣的部分。
我希望在不需要登录的情况下保护端点,因此我创建了自己的中间件,从我的users表中抓取了某个用户并从该用户对象创建了一个JWT令牌。
$ user = App \ User :: whereEmail(' email') - > first() $ token = JWTAuth :: fromUser($ user);
一旦我拿到令牌,我需要做的就是调用我的终点即/ api / v1 / users?token = {generatedToken}并且瞧!一切都好。但是,我们还需要在一定时间之后刷新令牌,而且该程序包再次提供了两个中间件
jwt.auth和jwt.refresh
jwt.auth midleware尝试使用身份验证方法通过凭据创建令牌,因此我将其换成我的中间件,我在上面验证用户,并且jwt.refreshes令牌。
如果您阅读我提到的文章,然后阅读包维基,它将是有意义的。 Cheerio !!