gpt4 book ai didi

java - Rest 身份验证 - 使用数据库查找进行 token 验证与替代方案

转载 作者:行者123 更新时间:2023-11-30 03:20:52 25 4
gpt4 key购买 nike

我阅读了 stackoverflow 上的几个问答,以实现其余身份验证。在其中一个问题中还找到了示例代码。 https://github.com/philipsorst/angular-rest-springsecurity/blob/master/src/main/java/net/dontdrinkandroot/example/angularrestspringsecurity/rest/AuthenticationTokenProcessingFilter.java

大多数答案都谈到了使用拦截器并根据身份验证 header ( token 和用户 ID 或登录 ID)过滤每个请求,并将其与数据库中存储的请求进行比较。

我正在实现一个订单管理系统。我的网址看起来像 http://myapi.com/customers/{customerId}/Orders/{OrderId}

目前是 http,我们很快就会设置 https

在 URL 中,我获取客户 ID 和订单 ID。我在数据库中快速查找订单 ID 和客户 ID,如果返回一些行,我将返回 JSON。

我有问题:

  1. 为了保护此端点,我可以使用安全拦截器。但每次我都必须根据数据库验证请求。我有哪些替代方案(缓存?)来验证或授权每个请求?

  2. 此休息端点由 Android 应用程序(Angular JS)客户端和网站(PHP 客户端)使用。对于移动设备,我不应该在用户每次登录时重新生成 token 。因此我将 token 有效期配置为 30 天。然而对于网站来说,它是一个 session token 。应该如何处理这种情况?

最佳答案

您需要的可以通过 Oauth 解决.

您的后端 (REST-API) 将需要对您的 API 操作进行身份验证访问。反过来,您的客户端/前端在与后端通信时需要发出经过身份验证的请求。这是通过发送访问 token 来实现的。

虽然这看起来很复杂,但查看 Stormpath 对您非常有用。 。我们对此有一个非常简单的解决方案。请查看Using Stormpath for API Authentication

作为摘要,您的解决方案将如下所示:

  1. 您将使用Stormpath Java SDK轻松委派您的所有用户管理需求。
  2. 在您的前端,当用户按下登录按钮时,您的前端将通过其 REST API 将凭据安全地发送到您的后端。

    2.1。顺便说一句,Stormpath 极大地增强了这里的所有可能性。您可以通过其 IDSite 将登录/注册功能完全委托(delegate)给 Stormpath,而不是拥有自己的登录页面。 ,或者您也可以委托(delegate)给我们的Servlet Plugin 。 Stormpath还支持Google、Facebook、LinkedIn和Github登录。

  3. 然后,您的后端将尝试根据 Stormpath 后端对用户进行身份验证,并返回一个访问 token :

    /** This code will throw an Exception if the authentication fails */
    public void postOAuthToken(HttpServletRequest request, HttpServletResponse response) {
    Application application = client.getResource(applicationRestUrl, Application.class);

    //Getting the authentication result
    AccessTokenResult result = (AccessTokenResult) application.authenticateApiRequest(request);

    //Here you can get all the user data stored in Stormpath
    Account account = accessTokenResult.getAccount();

    response.setStatus(HttpServletResponse.SC_OK);
    response.setContentType("application/json");

    //Output the json of the Access Token
    response.getWriter().print(token.toJson());
    response.getWriter().flush();
    }
  4. 然后,对于每个经过身份验证的请求,您的后端都会执行以下操作:

    /** This is your (now protected) exposed operation */ 
    public void getOrder(HttpServletRequest request, HttpServletResponse response) {
    Application application = client.getResource(applicationRestUrl, Application.class);

    OauthAuthenticationResult result = (OauthAuthenticationResult) application.authenticateOauthRequest(request).execute();

    System.out.println(result.getApiKey());
    System.out.println(result.getAccount());

    //Return what you need to return in the response
    doGetOrder(request, response);
    }

请看一下here了解更多信息

希望有帮助!

免责声明,我是一名活跃的 Stormpath 贡献者。

关于java - Rest 身份验证 - 使用数据库查找进行 token 验证与替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com