我正在尝试向使用BASIC身份验证和https保护的服务发送HTTP GET请求.如果我使用RESTClient Firefox插件这样做没有问题.我正在定义basic-header并将GET发送到url,我得到了答案(json中的数据).
现在我正在使用C#中的Windows应用商店应用程序来使用该服务.我在清单中启用了所有必需的功能,并编写了以下方法:
private async void HttpRequest()
{
string basic = "Basic ...........";
Uri testuri = new Uri(@"https://...Servlet");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", basic);
Task<HttpResponseMessage> response = client.GetAsync(testuri);
var text = await response;
var message = text.RequestMessage;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了许多不同的可能性,例如获取响应字符串但是所有内容都会导致服务器发出401状态代码答案.
我查看了许多类似的问题,我对通信的理解如下:客户端请求 - >服务器响应401 - >客户端发送授权标头 - >服务器响应200(确定)
我不明白为什么我得到401"未授权"状态代码,虽然我在开始时发送授权标题.如果有人知道如何在RESTClient中处理它,那将会很有趣.
BASIC标题是完全正确的我将它与RESTClient中的标题进行比较.
如果有人可以帮助我,这将是很好的.
在此先感谢您的亲切问候,Max
c# basic-authentication http-status-code-401 dotnet-httpclient
我需要从我的客户端 javascript 代码制作一个 ajax 请求,使用 jQuery 将一些数据发布到后端。
$.ajax({...});
Run Code Online (Sandbox Code Playgroud)
Javascript 代码可以被各种客户端嵌入,所以我CORS在我的后端启用并且请求正常。后端受 an 保护,Basic Auth并且 auth 标头存储在 javascript 客户端中。
我如何保护我的后端,以便只有我的客户可以发布数据并防止任何其他人这样做。
我尝试添加
\n\n <enforce-valid-basic-auth-credentials>false</enforce-valid-basic-auth-credentials>\nRun Code Online (Sandbox Code Playgroud)\n\n在 weblogic 服务器 12.1.3 的 config.xml 中的标签内<security-configuration>添加此行后,每当我启动服务器时,我的 weblogic 服务器都会关闭。
有什么不对?我已在下面附上我的 config.xml 内容
\n\n <domain-version>12.1.3.0.0</domain-version>\n <security-configuration>\n <name>mdm_domain</name>\n <realm>\n <sec:authentication-provider xsi:type="wls:default-authenticatorType">\n <sec:name>DefaultAuthenticator</sec:name>\n </sec:authentication-provider>\n <sec:authentication-provider xsi:type="wls:default-identity-asserterType">\n <sec:name>DefaultIdentityAsserter</sec:name>\n <sec:active-type>AuthenticatedUser</sec:active-type>\n </sec:authentication-provider>\n <sec:role-mapper xmlns:xac="http://xmlns.oracle.com/weblogic/security/xacml" xsi:type="xac:xacml-role-mapperType">\n <sec:name>XACMLRoleMapper</sec:name>\n </sec:role-mapper>\n <sec:authorizer xmlns:xac="http://xmlns.oracle.com/weblogic/security/xacml" xsi:type="xac:xacml-authorizerType">\n <sec:name>XACMLAuthorizer</sec:name>\n </sec:authorizer>\n <sec:adjudicator xsi:type="wls:default-adjudicatorType">\n <sec:name>DefaultAdjudicator</sec:name>\n </sec:adjudicator>\n <sec:credential-mapper xsi:type="wls:default-credential-mapperType">\n <sec:name>DefaultCredentialMapper</sec:name>\n </sec:credential-mapper>\n <sec:cert-path-provider xsi:type="wls:web-logic-cert-path-providerType">\n <sec:name>WebLogicCertPathProvider</sec:name>\n </sec:cert-path-provider>\n <sec:cert-path-builder>WebLogicCertPathProvider</sec:cert-path-builder>\n <sec:name>myrealm</sec:name>\n <sec:password-validator xmlns:pas="http://xmlns.oracle.com/weblogic/security/providers/passwordvalidator" xsi:type="pas:system-password-validatorType">\n <sec:name>SystemPasswordValidator</sec:name>\n <pas:min-password-length>8</pas:min-password-length>\n <pas:min-numeric-or-special-characters>1</pas:min-numeric-or-special-characters>\n </sec:password-validator>\n </realm>\n <default-realm>myrealm</default-realm>\n <credential-encrypted>{AES}lWxYlHpEqfbODbLmeerJr6H86R6+lvszW466UpoYzuyh6X617HokRf/oKl3cZJM+JTXliBWwXFhAiC9G3JrbxYNBkXMUGqFSOicuMVJVD0tTCuTr6sfY7UPK9M40Vi4n</credential-encrypted>\n <node-manager-username>weblogic</node-manager-username>\n <node-manager-password-encrypted>{AES}loTlWUtqsyw7sq4ujEhLVDaHCv/s7k22k0KSacFO/Ww=</node-manager-password-encrypted>\n <enforce-valid-basic-auth-credentials>false</enforce-valid-basic-auth-credentials>\xc2\xa0\n </security-configuration>\nRun Code Online (Sandbox Code Playgroud)\n 我有一个KongIngress关于 Ingress 资源的对象配置属性,它调用 kong 作为 Ingress 控制器。我实际上有这个配置:
apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
name: echo-site-ingress
namespace: hello-world
annotations:
kubernetes.io/ingress.class: "kong"
proxy:
protocols:
- http
- https
# path: /
route:
methods:
- POST
- GET
strip_path: true
preserve_host: true
---
#My Ingress resource
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: kong
plugins.konghq.com: helloworld-customer-acceptance-basic-auth, hello-world-customer-acceptance-acl
name: echo-site-ingress
namespace: hello-world
spec:
rules:
- host: hello-world.bgarcial.me
http:
paths:
- backend:
serviceName: echo
servicePort: 80
path: /
tls:
- hosts:
- …Run Code Online (Sandbox Code Playgroud) basic-authentication kong kubernetes-ingress kong-plugin kong-ingress
专家,,
我有一个 Spring Boot 2.5.5 应用程序(嵌入式 tomcat),我必须在其中配置基本身份验证。
这是我的课程,可以为我完成工作
@Component
@EnableWebSecurity
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我只需要在浏览器中输入用户/密码一次,它就适用于任何后续请求。此外,在服务器重新启动后我不需要提供新的用户名/密码,这让我抓狂 - 应用程序仍然有效,我可以访问我的 API/页面。
即使我假设浏览器以某种方式保存用户名和密码,一旦服务器因密码更改而重新启动,它就不应该工作 - 不是吗?
更新二:
按照M. Deinum的建议,我将会话设置为无状态,并且成功了。然后,我继续使用 InMemoryUserDetailsManager 实现基本身份验证,并添加以下代码,我们再次回到同一问题。凭据似乎再次存储在会话中,我不需要为后续请求传递它们。
@Autowired
public ApplicationSecurityConfig(PasswordEncoder passwordEncoder) {
this.passwordEncoder = passwordEncoder;
}
@Override
@Bean
protected UserDetailsService userDetailsService() {
UserDetails user = User
.builder()
.username("admin")
.password(passwordEncoder.encode("admin"))
.roles("ADMINISTRATOR")
.build();
return new InMemoryUserDetailsManager(user);
}
Run Code Online (Sandbox Code Playgroud) api ×1
c# ×1
client ×1
javascript ×1
kong ×1
kong-ingress ×1
kong-plugin ×1
security ×1
spring ×1
spring-boot ×1
weblogic12c ×1