这个登录逻辑是通过RESTful调用声音实现的吗?

2023-12-28

(我不是在谈论对 RESTful API 的调用进行身份验证。我是在谈论通过 RESTful API 为用户创建登录逻辑。)

当用户访问我网站的任何页面时,servlet filter将拦截请求并检查是否有必要authentication info存在于session。如果不存在,用户将被引导至登录页面。

在登录页面上,使用用户名和密码对服务器上的 RESTful API 进行 ajax 调用。根据该 RESTful API 的返回状态,页面上的 JavaScript 将决定是否允许用户进入该站点。请注意,实际的身份验证逻辑仍然在服务器端执行。客户端JS仅根据服务器的结果进行操作。

在服务器上,RESTful登录API将检查提交的用户名/密码并查看它是否包含在DB中。如果存在则存储必要的authentication info进入session因此来自同一客户端的未来请求将不会被阻止。

我的问题是:

  • 这个登录逻辑合理吗?

  • Because session涉及到,RESTful登录API是一种not stateless。那么它仍然是RESTful吗?

这是我的代码:

login.js

// login.js
$(function () {
    $('#submitDiv').click(doLogin);
});

function doLogin() {
    $('#resultDiv').text("start!");
    user = new Object();
    user.username = $('#txtUsername').val();
    user.pwd = $('#txtPassword').val();

    $.ajax({
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        'type': 'POST',
        'url': 'doLogin.sm',
        'data': JSON.stringify(user),
        'dataType': 'text',
        'success': loginSuccessful,
        'complete': function (jqXHR, textStatus) {
            $('#resultDiv').text("complete with:" + textStatus);
        }
    });
}

function loginSuccessful() {
    //if referrer is null, jump to dashboard, else jump to referrer.
    var referer = getUrlVars()['referer'];
    if (referer) {
        window.location.replace(referer);
    }
    else {
        window.location.replace('dashboard.html');
    }
}

登录.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>My Cloud - Login page</title>
    <link rel="stylesheet" type="text/css"
          href="resources2/css/bootstrap.css">
    <meta charset="utf-8">
    <!--force to use the latest IE engine-->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="resources2/js/jquery-1.11.3.js"></script>
    <script src="resources2/js/bootstrap.js"></script>
    <script src="resources2/js/pagejs/common.js"></script>
    <script src="resources2/js/pagejs/login.js"></script>
</head>
<body>
    <h1>My Login Page</h1>
    <div id="loginDiv">
        <input id="txtUsername" type="text" value="test">
        <input id="txtPassword" type="password" value="test">
        <div id="submitDiv" class="btn btn-default">
            Login
        </div>
        <div id="resultDiv"></div>
    </div>
</body>
</html>

如果您的 JavaScript 决定是否允许用户从您的网站获取页面,那么是什么阻止用户在 JavaScript 代码中设置断点并更改身份验证过程的结果?

授权决策需要在服务器上进行,因为您永远不能信任客户端(浏览器)。

您的站点需要在服务器端验证用户是否已通过身份验证。这通常是通过发送某种隐式认证 http://leastprivilege.com/2015/04/01/implicit-vs-explicit-authentication-in-browser-based-applications/信息以及服务器可以验证且客户端无法伪造的请求。

我在你的设计中没有看到这种情况发生。但为什么你要尝试设计自己的身份验证机制呢?为什么不使用像这样的标准协议WS-联邦 https://msdn.microsoft.com/en-us/library/bb498017.aspx, SAML-P https://msdn.microsoft.com/en-us/library/azure/dn195589.aspx, or OpenID 连接 http://openid.net/connect/为了这?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个登录逻辑是通过RESTful调用声音实现的吗? 的相关文章

  • 使用 Mechanize (Ruby) 进行基本身份验证和表单身份验证

    我正在尝试登录公司内部网上的一个站点 该站点具有基本身份验证弹出对话框和基于表单的身份验证 这是我正在使用的代码 导致 401 gt Net HTTPUnauthorized 错误 require rubygems require mech
  • 有没有办法在 Blazor 中进行外部身份验证而不使用数据库?

    所以本质上我有一个 Blazor 服务器端应用程序 我正在尝试使用 Azure AD SAML 添加外部身份验证 我在用Sustainsys Saml2 AspNetCore2用于外部身份验证的包 我不太熟悉 ASP NET 或 Blazo
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • 如何在 Spring-Security 中重命名表 persist_logins

    Spring Security 中管理 记住我 身份验证的默认表名称是 persistent logins 由于数据库命名约定 我需要重命名该表 持久登录 to T PERSISTENT LOGINS 请提供任何帮助 您需要编写自己的实现J
  • 设置restAssured 以全局记录所有请求和响应

    我想为所有人启用日志记录RestAssured默认情况下响应和请求 这就是我所做的 RestAssured requestSpecification new RequestSpecBuilder setBaseUri api setCont
  • 跨子域的 PHP 会话

    我正在尝试设置以下内容 auth example com sub1 example com sub2 example com 如果用户访问sub1 example com or sub2 example com他们没有登录 他们被重定向到a
  • Java 的 REST API?

    我正在准备一个基于控制台的应用程序 该应用程序的结果是一个 RDF XML 文件 其中包含我来自 LinkedIn 的所有连接的数据 现在的问题是我的整个应用程序是基于控制台的 我需要有一个 REST API 以便与我的应用程序合并 我不知
  • 将 HTTP GET 请求中的 JSON 数据从 JAVA 代码发送到 REST API

    我正在向我的 API 成功发出以下curl 请求 curl v X GET H Content Type application json d query some text mode 0 http host domain abc com
  • RestSharp 不反序列化 JSON 对象列表,始终为 Null

    我在使用 RestSharp 将返回内容反序列化到我的类中时遇到问题 从我所有的搜索来看 我的做法似乎是正确的 我宁愿使用 RestSharp 的反序列化器 也不愿使用 Newstonsoft 的 Json NET 等另一个包 我正在做的是
  • Gmail REST API - 将邮件标记为已读

    我正在尝试使用 Gmail REST API 将邮件标记为已读 markGmailRead click function var request ajax type POST dataType json headers Authorizat
  • HTTP 缓存的授权检查

    我有如下列出的 Web API 方法 用于REST服务 这是为了获取库存审核员的所有用户信息 只有授权的 Inventory Auditor 用户才能访问此资源 RoutePrefix api users public class User
  • 姜戈。登录表单的错误消息

    我制作登录名 密码表格 model class LoginForm forms Form username forms CharField max length 100 password forms CharField widget for
  • 从 .NET 应用程序登录 Windows

    我认为它应该是一个Windows服务 当给定某些条件时 它应该执行登录到机器的操作 机器将在 登录屏幕 中检查网络服务 以了解登录时应使用的用户名和密码 这可以吗 我不想要 自动登录 Windows 功能 Thanks AFAIK 无法完成
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • 从 Google/Facebook 帐户重新验证用户身份

    因此 我需要创建一个 REST API 来为 IOS 应用程序提供功能 我们允许用户仅使用普通帐户或使用脸书 谷歌登录 我最近一直在阅读 OAuth 我想我了解在我的情况下如何使用 OAuth 的过程 当用户使用脸书 谷歌登录 在我的应用程
  • REST Content-Type:它应该基于扩展还是 Accept 标头?

    RESTful Web 服务返回的表示 html xml json 应该由 url 还是由 Accept HTTP 标头确定 两者都有效 引用自xml com http www xml com pub a 2004 08 11 rest h
  • 如何通过HBase REST服务获取Phoenix表数据

    我使用 Phoenix JDBC 驱动程序在以下代码片段中创建了一个 HBase 表 Class forName org apache phoenix jdbc PhoenixDriver Connection conn DriverMan
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE

随机推荐