我正在构建一个非常小的 api。在 api 中,我使用来自请求的基本身份验证标头对请求进行身份验证。这是我所做的代码
$headers = apache_request_headers() ;
// print_r($headers);
if(isset($headers['Authorization'])){
//$credentials = base64_decode($headers);
print_r($headers['Authorization']);
}
Run Code Online (Sandbox Code Playgroud)
我的授权标头为“ Basic YXBpa2V5OmFqZWVzaA==” 现在我将如何检查此基本授权标头是否有效?我应该以用户名:密码格式解码 base64 字符串并与 DB 进行检查,还是在生成用户名和密码时,是否必须将其存储为 base64 格式并将请求的 base64 字符串与 DB 中的字符串进行比较?
我想知道验证基本身份验证请求的标准做法是什么?
请提出一些想法。我刚刚开始,请原谅我的愚蠢问题。
我正在使用令牌样式的身份验证过程。客户端获得令牌后,它要么设置在客户端的 cookie(对于 Web)中,要么设置在客户端请求的授权标头中(对于移动设备)。但是,为了获得有效的令牌,客户端必须首先使用有效的用户名/密码组合“登录”。我的问题是这样的:
通过在授权标头中发送用户名/密码组合与作为请求的 JSON 正文中的参数(假设我使用的是 HTTPS),是否有任何额外的安全性?
我只需要在每个会话中“一次”发送用户名/密码组合即可获取令牌。通过“基本身份验证”风格来做我有什么好处吗?
我的开发环境在代理后面,所以我需要将代理信息设置为其余模板,当我使用 HttpComponentsClientHttpRequestFactory 并在 httpClient 中设置代理设置并将其设置在模板中时,这一切都很好。
但是现在我有一个需要基本身份验证的休息服务。要设置基本身份验证凭据,我需要在其余模板的 httpClient 中设置它们。但是我看到 httpClient 中的 getparams 方法已被弃用,所以我不能只更新模板中的现有客户端,如果我创建一个新的 httpclient 对象,我将覆盖在应用程序引导期间设置的代理信息。
那么有什么方法可以从其余模板中提取 httpClient 并更新它吗?或者有没有其他方法可以解决这个问题?
谢谢。
今天是个好日子!
我在这里有一个带有slim-basic-auth的工作超薄代码,当我转到受限目录时,会显示:
一切正常,但我想要做的是将其重定向到我的登录页面,而不是显示弹出登录框。这是我的登录页面:
我的苗条代码:
$pdo = new \PDO("mysql:host=localhost;dbname=databasename", "username");
$app->add(new \Slim\Middleware\HttpBasicAuthentication([
"path" => "/main",
"realm" => "Protected",
"authenticator" => new PdoAuthenticator([
"pdo" => $pdo,
"table" => "accounts",
"user" => "accountUsername",
"hash" => "accountPassword"
]),
"callback" => function ($request, $response, $arguments) use ($app) {
return $response->withRedirect('/main/contacts');
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用弹出登录框登录时,它可以工作,但我真的想将它重定向到我的登录页面而不是那个页面。
任何帮助将非常感激。
对于服务器到服务器对话,OAuth 是否比通过 HTTPS 的基本身份验证更安全?
我的意思是,如果我想使用 OAuth 从服务器 A 到服务器 B 执行一些 API 请求,我必须在服务器 A 上存储一些身份验证数据(密钥、秘密等)。然后使用这些身份验证数据,我可以拥有一个令牌并使用此令牌向服务器 B 发出请求。稍后使用相同的身份验证数据,我将拥有一个令牌密钥,并将能够使用此新令牌发出请求。
使用基本身份验证,我在服务器 A 上有一些身份验证数据(用户、密码)。我现在和以后都可以使用这些数据在 B 上执行请求。
现在假设 auth 数据被发现,因为服务器 A 上.conf有一个包含 auth 数据的文件,而这个文件被盗了。在这两种情况下(OAuth 和 Basic Auth),这都很糟糕,而且使用 OAuth 而不是 Basic Auth 没有任何好处。一个真实案例:我前几天刚刚创建了一个twitter bot(与OAuth的连接),如果发现配置信息,帐户被盗,attaquant现在和将来都可以使用这个bot。
那么,在使用 Oauth over Basic Auth 进行服务器到服务器请求(使用 HTTPS)时,是否还有另一个我不知道(或者我可能误解了某些东西)的原因?
我正在使用 Spring 构建 REST API,并且目前正在使用自定义用户详细信息服务和以下配置代码对我的所有请求进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
Run Code Online (Sandbox Code Playgroud)
我还设置了一个DaoAuthenticationProvider使用我的用户详细信息服务并使用它来配置全局安全性。
现在,我想提供一个端点(虽然仍然使用 HTTP 基本身份验证进行保护)使用不同的用户详细信息服务来检查是否允许用户访问给定资源。
如何为不同的端点使用两种不同的用户详细信息服务?
我想测试 Rails 5 中激活了基本身份验证的控制器。当前官方说明(截至 2018-10-14)中解释的方式由于某种原因不起作用。问答“在 Rails 2.2+ 中测试 HTTP 基本身份验证”对于 Rails 5 来说似乎太旧了(至少对于默认情况)。
这是重现该案例的简化示例。
我从全新安装的 Rails(最新稳定版 5.2.1)通过脚手架制作了一个文章模型和相关资源:
bin/rails g scaffold Article title:string content:text
Run Code Online (Sandbox Code Playgroud)
并按照官方指南为控制器添加了基本身份验证功能;那么 ArticlesController 就是这样的,它当然有效:
# /app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
http_basic_authenticate_with name: "user1", password: "pass"
before_action :set_article, only: [:show, :edit, :update, :destroy]
def index
@articles = Article.all
end
end
Run Code Online (Sandbox Code Playgroud)
在官方指令解释测试基本身份验证的方式; 你request.headers['Authorization']在setup控制器的测试文件中添加
块,我做了:
# /test/controllers/articles_controller_test.rb
require 'test_helper'
class ArticlesControllerTest < ActionDispatch::IntegrationTest
setup do
request.headers['Authorization'] = …Run Code Online (Sandbox Code Playgroud) ruby testng ruby-on-rails basic-authentication ruby-on-rails-5
我已经看到在GET和POST请求中都完成了基本身份验证。
一方面,我认为浏览器缓存GET请求可能是一个问题,但另一方面:POST更大但鼓励提供敏感信息。
我不是在问GET和POST请求之间的区别,而是应该将哪一个用于基本身份验证。应该GET只与 HTTPS 一起使用吗?应该POST一直使用吗?
我的问题是应该使用哪一个?哪个是更好的做法?
java rest restful-authentication jax-rs basic-authentication
我想从这个端点获取交易状态
https://api.sandbox.midtrans.com/v2/[orderid]/status
Run Code Online (Sandbox Code Playgroud)
但它需要一个基本的身份验证,当我将它发布到 URL 上时,我得到的结果是:
{
"status_code": "401",
"status_message": "Operation is not allowed due to unauthorized payload.",
"id": "e722750a-a400-4826-986c-ebe679e5fd94"
}
Run Code Online (Sandbox Code Playgroud)
我有一个网站 ayokngaji.com 然后我想发送基本身份验证以获取我的 url 状态。例子:
ayokngaji.com/v2/[orderid]/status = (BASIC AUTH INCLUDED)
Run Code Online (Sandbox Code Playgroud)
我怎么做这个?
我还尝试使用邮递员,并使用基本身份验证它可以工作,并显示正确的结果
当我在网上搜索它时,它显示我喜欢 CURL、BASIC AUTH,但我不了解这些教程中的任何一个,因为我对英语的限制和对 php 的小知识
解决了:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.sandbox.midtrans.com/v2/order-101c-1581491105/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/json",
"Authorization: Basic U0ItTWlkLXNl"
),
)); …Run Code Online (Sandbox Code Playgroud) 我正在做一个 Flask 应用程序,我需要做 HTTP 基本身份验证,但它不起作用
我在做例子
我需要做什么才能解决这个问题?
导入的库
from flask import Flask, render_template, render_template_string, request
import json
Run Code Online (Sandbox Code Playgroud)
带身份验证的代码片段
@app.route('/user/<string:name>')
def user(name):
request.authorization.username
request.authorization.password
with open('json/users.json', 'rt', encoding='utf8') as f:
x = f.read()
data = json.loads(x)
user = data[name]
return render_template('about_user.html',
_name=user['name'],
_age=user['age'],
_discord=user['discord']
)
Run Code Online (Sandbox Code Playgroud)
一个错误
AttributeError: 'NoneType' object has no attribute 'username'
Run Code Online (Sandbox Code Playgroud)