laravel 基于 API 响应调用的自定义认证

Posted

技术标签:

【中文标题】laravel 基于 API 响应调用的自定义认证【英文标题】:laravel custom authentication based on API response call 【发布时间】:2019-06-25 16:56:02 【问题描述】:

目前我使用 Laravel 5.7 并尝试构建登录机制。类似Custom user authentication base on the response of an API call的情况。

我的情况是我在本地没有自己的数据库和用户表。只需调用 API 通过传递用户名、密码、客户端 ID、客户端密码进行验证。

我对邮递员 API 的请求:

POST Body   

  "username": "tester",
  "password": "ps",
  "CLIENT_ID": "xx",
  "CLIENT_SECRET": "yy"

API 对 postman 中成功事件的响应。用户信息通过解码在这个 JWT 令牌中。


    "token_type": "Bearer",
    "id_token": "eyJraWQiOiNGUvdFZC...",
    "access_token": "eyJraWQiOi....",
    "expire_in": 3600,
    "refresh_token": "eyJjdHkiOiJK..."

我希望在 loginContoller 中执行类似操作并使用 Auth::**:

public function postSignIn(Request $request)

    $username = strtolower($request->username);
    $password = $request->password;

    if (Auth::attempt(['username' => $username, 'password' => $password])) 
        return Redirect::to('/dashboard')->with('success', 'Hi '. $username .'! You have been successfully logged in.');
     else 
        return Redirect::to('/')->with('error', 'Username/Password Wrong')->withInput(Request::except('password'))->with('username', $username);
    

问题:

    如何在 laravel 中实现 API 认证? (使用 guzzle、服务提供者、Authenticatable Contract 和驱动 Auth?)

    如何将访问令牌存储在 session/cookie 中,以便在以后每次发送到 API 的每个请求中附加?

    刷新令牌失效后如何存储,获取访问令牌?

感谢所有帮助或任何示例/指导。

【问题讨论】:

嗨,尝试使用“护照”-> laravel.com/docs/5.7/passport ... @EhsanKeramat 嗨,但我没有在这个 laravel 应用程序中实现 API。它只是一个瘦客户端 Web 应用程序。据我了解,护照使用api身份验证并建立在oauth2服务器之上。 嗨,看,如果你想在你的网络、应用程序等中使用身份验证...你必须有数据库访问权限、身份验证控制器代码,所以我们使用 laravel 来减少我们的代码并使用稳定的插件更高的安全性和性能,如果您想在您的应用程序中使用身份验证,您必须使用之前测试和使用过的插件,如“护照”或构建您自己的!为了构建您的韩元,请阅读如何处理令牌、用户名、密码、安全性、性能等...在数据库中设置令牌并比较检查用户值!!! (例如去阅读如何构建自己的护照处理)... @JohnnyCc 你找到解决这个问题的方法了吗?我也有同样的问题 我遇到了类似的问题。该场景是使用 C# 输出 json(承载令牌、用户数据)的 API。前端使用 Laravel。看起来很困难,使用 laravel 构建前端但基于 API 响应调用进行身份验证。正如@JohnnyCc 所说,Laravel 没有实现 API(护照),而是作为前端。 【参考方案1】:

您不必自己动手,有很多插件可以为您解决问题,就像 lavael 护照一样,使用起来非常简单,您必须看看

【讨论】:

以上是关于laravel 基于 API 响应调用的自定义认证的主要内容,如果未能解决你的问题,请参考以下文章

使用 IdentityServer 与创建基于 JWT 的自定义身份验证

使用自定义 json 响应进行 Laravel 验证

Alamofire 的自定义、基于内容的验证器(在 Swift 中)

Laravel 通过 Passport 实现 API 请求认证:基于 Cookie 的同域名应用篇

Laravel 通过 Passport 实现 API 请求认证:令牌作用域详解

Api 的自定义身份验证 Azure 移动服务