api - HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“默认”。
问题描述
我正在通过编写 API 自动化。MStest 框架。我试图自动化的 wsdl 需要 Kerberos 身份验证。即使我提供了 client_Id、client_secret 和用户/通过身份验证,我仍然收到 401 未经授权的错误。由于我是新手,我可能会在这里问一些愚蠢的问题,但到目前为止我在任何地方都没有得到任何答案。
异常:“HTTP 请求未经客户端身份验证方案‘匿名’的授权。从服务器接收到的身份验证标头为‘默认’。”
内部异常:“远程服务器返回错误:(401)未经授权。”
'''
[测试方法]
public void GetUsers()
{
APIClient= new AutoStudioFW.APIService.APIServiceclient();
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
APIClient.ClientCredentials.UserName.UserName = "userabc";
APIClient.ClientCredentials.UserName.Password = "passabc";
_httpRequestProperty = new HttpRequestMessageProperty();
_httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(APIClient.ClientCredentials.UserName.UserName + ":" + OrionAPIClient.ClientCredentials.UserName.Password));
_httpRequestProperty.Headers.Add("client_id", "01ab34cd");
_httpRequestProperty.Headers.Add("client_secret", "abc123secret");
scope = new System.ServiceModel.OperationContextScope(APIClient.InnerChannel);
System.ServiceModel.OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = _httpRequestProperty;
var GetUser = APIClient.getCurrentUser("555");
}
解决方案
您可以尝试在配置中设置安全模式:
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
推荐阅读
- javascript - 如何使用 SVG(而不是 JSON 数据)创建 D3 地理投影
- sql - 按限制使用的顺序和偏移量未按预期顺序返回结果
- telegram - 如何将我收到的电报信息发送到电子邮件
- python - 在没有硬编码位置的情况下从 python 运行 perl
- sql - 如何按总和小于 x 对数据进行分组
- matlab - 如何在 MATLAB 中将 3D 动画线保存为视频或 gif
- javascript - 是否可以在功能性 React 组件中使用 Promise 的值?
- python - Django 视图有时会路由到错误的 URL
- amazon-web-services - 如何打印/调试数据源资源的所有可用字段?
- jmeter - 从 Jmeter 关联记录器记录中排除某些 URL