java authorization_OkHttp3 之 Authorization处理认证(四)

article/2025/10/12 9:06:27

bc7fdfc03a181785f939cc7c3cabcadc.gif

处理验证

这部分和HTTP AUTH有关.

HTTP AUTH

使用HTTP AUTH需要在server端配置http auth信息, 其过程如下:客户端发送http请求

服务器发现配置了http auth, 于是检查request里面有没有”Authorization”的http header

如果有, 则判断Authorization里面的内容是否在用户列表里面, Authorization header的典型数据为”Authorization: Basic jdhaHY0=”, 其中Basic表示基础认证, jdhaHY0=是base64编码的”user:passwd”字符串. 如果没有,或者用户密码不对,则返回http code 401页面给客户端.

标准的http浏览器在收到401页面之后, 应该弹出一个对话框让用户输入帐号密码; 并在用户点确认的时候再次发出请求, 这次请求里面将带上Authorization header.

一次典型的访问场景是:浏览器发送http请求(没有Authorization header)

服务器端返回401页面

浏览器弹出认证对话框

用户输入帐号密码,并点确认

浏览器再次发出http请求(带着Authorization header)

服务器端认证通过,并返回页面

浏览器显示页面

OkHttp认证

OkHttp会自动重试未验证的请求. 当响应是401 Not Authorized时,Authenticator会被要求提供证书. Authenticator的实现中需要建立一个新的包含证书的请求. 如果没有证书可用, 返回null来跳过尝试. 使用Response.challenges()来获得任何authentication challenges的 schemes 和 realms. 当完成一个Basic challenge, 使用Credentials.basic(username, password)来解码请求头.

Basic Authentication认证private final OkHttpClient client;

public Demo() {

client = new OkHttpClient.Builder()

.authenticator(new Authenticator() {

@Override

public Request authenticate(Route route, Response response) {

System.out.println("Authenticating for response: " + response);

System.out.println("Challenges: " + response.challenges());

String credential = Credentials.basic("jesse", "password1");

return response.request().newBuilder()

.header("Authorization", credential)

.build();

}

})

.build();

}

public void run() throws Exception {

Request request = new Request.Builder()

.url("http://publicobject.com/secrets/hellosecret.txt")

.build();

Response response = client.newCall(request).execute();

if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);


http://chatgpt.dhexx.cn/article/TXgmCcdF.shtml

相关文章

shiro授权过程

一、授权的核心概念 授权,也就是权限认证或访问控制,即在应用中控制谁能访问哪些资源 授权中的核心要素: 1 用户,在shiro中代表访问系统的任何客户端,即subject 2 角色,是权限的集合,或字符串值…

安全-认证授权、数据脱敏

一、认证授权 JWT :JWT(JSON Web Token)是一种身份认证的方式,JWT 本质上就一段签名的 JSON 格式的数据。由于它是带有签名的,因此接收者便可以验证它的真实性。 SSO(单点登录) :SSO(Single Sign On) 即单…

认证 (authentication) 和授权 (authorization) 的区别

以前一直傻傻分不清各种网际应用中 authentication 和 authorization, 其实很简单: 这两个术语通常在安全性方面相互结合使用,尤其是在获得对系统的访问权限时。两者都是非常重要的主题,通常与网络相关联,作为其服务基础架构的关键部分。然而…

Authorization—权限控制流程

本篇是对Shiro体系架构的介绍,本栏目大部分内容来自于Shiro官网。翻译过程中已经尽量保证用词的准确性和易懂性,如有不准确或者不确切的地方,请联系作者加以修改。本篇内容翻译自Authorization特征与Authorization官方指南。 Authorization&…

认证 (Authentication) 和授权 (Authorization)的区别是什么?

说简单点就是: 认证 (Authentication): 你是谁。 授权 (Authorization): 你有哪些权限 干什么事情。 稍微正式点(啰嗦点)的说法就是: Authentication(认证) 是验证您的身份的凭据&a…

变量定义与类型

命名 保留字与关键字 关键字是系统已经用的,保留字是系统自带的的保留 为以后使用做准备 查看关键字方法 import keyword #引入关键字模块 print (keyword.kwlist) #打印系统全部关键字 变量声明 三种格 #格式1 s1 "北京图灵学…

Java变量定义时候的注意事项

常量定义的基本注意事项 在JAVA语言中,主要利用final关键字,(在java类中灵活使用Static关键字)来定义常量。 当常量被设定后,一般情况下就不允许在进行修改,如可以利用以下形式来定义一个常量:final doubl…

变量的定义和使用

目录 一、变量的定义 二、变量的组成 1.标识 2.类型 3.值 三、变量的多次赋值 一、变量的定义 变量名(name) 赋值运算符() 值(小王) name 小王 二、变量的组成 1.标识 表示对象所存储的物理地址,使用内置函数 id(obj) 来获取。 print(id(name)) 运行…

C语言中变量声明和变量定义的区别

本文转载至CSDN博客JeanCheng 变量声明和变量定义 变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明,extern声明不是定义…

C++ 中的变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。 变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; 在这里,type 必须是一个有效的 C 数据类型…

十:变量的定义和声明的区别?

1. 变量的声明: 声明是用来告诉编译器变量的名称和类型,而不分配内存。变量的声明有两重含义: 告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的。声明可以出现多次。 告诉编译…

C语言基础教程 之 如何定义变量!

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; 在这里,type 必须是一个有效的 C 数据类型&…

变量的定义

变量 变量用于存储编程所使用的数据和方法。 声明一般变量的关键字:var,let,const.其中let和const是es6的语法。 声明其他特殊变量的关键字:function,class,improt(先了解)等 声明变量 变量用于存储数据,因此可以把变量实际上就…

03-变量的定义

一、变量的定义 1.变量是什么? 一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据。 2.什么时候需要定义变量? 如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。…

【论文阅读】ICRA2021: VDB-EDT An Efficient Euclidean Distance Transform Algorithm Based on VDB Data Struct

参考与前言 Summary: 浩哥推荐的一篇 无人机下的建图 and planning实验 Type: ICRA Year: 2021 论文链接:https://arxiv.org/abs/2105.04419 youtube presentation video:https://youtu.be/Bojh6ylYUOo 代码链接:https://github.com/zhud…

scipy.ndimage.distance_transform_edt 和 cv2.distanceTransform用法

scipy.ndimage.distance_transform_edt 和 cv2.distanceTransform 的作用都是计算一张图上每个前景像素点到背景的最近距离。 import cv2 import numpy as np from scipy.ndimage import distance_transform_edta np.array(([0, 1, 1, 1, 1],[0, 0, 1, 1, 1],[0, 1, 1, 1, 1]…

java edt,java并发之EDT测试

测试代码如下: 1、耗时计算没有单独起线程处理,耗时计算在EDT线程执行,导致界面没有响应,处于卡死状态 package thread; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent…

linux服务端修改EDT为东八区,EDT开发环境配置

1 安装条件 512MB内存或更高 Win XP/Win Vista/Win 7/RedHat Linux 32位或者64位操作系统(推荐32位) 安装IE7/8/9、FireFoxLatest Version、Chrome等浏览器中的一种 OracleJRE 1.6或更高版本 2 安装步骤 EDT 0.8.0已经发布发布。用户现在可以在http://www.eclipse.org/edt/#d…