经过几个小时的互联网搜索,我决定向你们寻求帮助。
我已经用几个简单的 get/post 方法编写了一个 Web API。我正在使用个人用户帐户身份验证方法。
使用 HttpClient,我成功地调用了每个 AUTHORIZED get 和 post 方法以及用于生成授权令牌的 /token 端点。
问题是我必须在 .NET Framework 3.5 项目中调用这些方法。因此,我尝试使用 WebClient 来执行此操作,因为我了解到 .NET Framework 3.5 不支持 HttpClient。
GetAPIToken() 方法生成不记名令牌并且它有效。
private static string GetAPIToken(string userName, string password, string apiBaseUri)
{
using (WebClient client = new WebClient())
{
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
var response = client.UploadString(apiBaseUri + "/Token", "POST", "grant_type=password&username=" + userName + "&password=" + password);
var jObject = JObject.Parse(response);
return jObject.GetValue("access_token").ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
当我从 Web API 中删除 [Authorize] 属性时,此 GET 方法有效,但在获得授权后无法使其工作。
//GET ODRA?ENI …
Run Code Online (Sandbox Code Playgroud) HttpClient
我想通过我自己的 C# API向外部 API 发送请求。我正在使用 dot net 5 和基本身份验证。这是我的代码:
var client = new HttpClient
{
BaseAddress = new Uri(baseUrl)
};
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Put, "apiUrl");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var param = JsonConvert.SerializeObject(new
{
param1="",
param2=""
});
requestMessage.Content = new StringContent(param, Encoding.UTF8, "application/json");
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{pass}")));
HttpResponseMessage response = await client.SendAsync(requestMessage);
Run Code Online (Sandbox Code Playgroud)
通常,我像这样发送http请求。但现在我遇到了一些问题。
从我的请求标头中删除行授权标头后HttpResponseMessage response = await client.SendAsync(requestMessage);
,我收到 UnAuthorized http 错误。
我知道,当发生重定向时,出于安全原因,授权标头被删除。我也不确定外部 API 中的重定向。
我将HttpClientHandler
with添加AllowAutoRedirect = false
到我的HttpClient
var handler = new HttpClientHandler() …
Run Code Online (Sandbox Code Playgroud) c# httpclient unauthorized basic-authentication www-authenticate
我有一个本地git存储库.最近我从bitbucket添加了一个远程存储库,并通过以下方式将我的分支推送到那里:git push bitbucket(因为我在https url中配置了用户名和密码).但是当我尝试推送时,使用NetBeans,当我从配置的远程存储库列表中选择并且当我尝试手动输入远程存储库详细信息时,我总是获得401 Unauthorized.我有最新版本的NetBeans和Git插件.
在此先感谢您的帮助.
在服务器上,安装了 Nginx。Let's Encrypt 在 www.domain.com 上运行良好,但不适用于 static.domain.com
使用 PuTTY,当我输入时:
sudo letsencrypt certonly -a webroot --webroot-path=/var/www/site/domain -d static.domain.com -d domain.com -d www.domain.com
我有以下问题:
Failed authorization procedure. static.domain.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://static.domain.com/.well-known/acme-challenge/c6zngeBwPq42KLXT2ovW-bVPOQ0OHuJ7Fw_FbfL8XfY: "<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>"
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: static.domain.com
Type: unauthorized
Detail: Invalid response from
http://static.domain.com/.well-known/acme-challenge/c6zngeBwPq42KLXT2ovW-bVPOQ0OHuJ7Fw_FbfL8XfY:
"<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>"
To fix these errors, please …
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过其REST API与Keycloak进行交互。我有主领域和默认的admin用户,以及测试领域。首先,我获得了管理员帐户和测试领域的访问令牌:
let data = {
grant_type : 'password',
client_id : 'test-realm',
username : 'admin',
password : 'admin'
};
let headers = {
'Content-Type': 'application/x-www-form-urlencoded'
};
axios.post(
'https://someurl.com:8080/auth/realms/master/protocol/openid-connect/token',
qs.stringify(data),
headers
)
Run Code Online (Sandbox Code Playgroud)
没关系。然后,我尝试拨打电话来创建用户(或执行其他任何操作),然后收到401未经授权的错误:
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Bearer ${accessToken}`
};
data = {
rep: {
email: "test@email.com",
username: "test@email.com"
},
path: 'test-realm'
};
axios.post('https://someurl.com:8080/auth/admin/realms/test-realm/users',
qs.stringify(data),
headers
)
Run Code Online (Sandbox Code Playgroud)
这不是包含令牌的正确方法吗?访问令牌是您用来认证其他API调用的令牌吗?管理员帐户的令牌不应该用于通过主领域验证对其他客户端的呼叫吗?我必须在管理控制台中更改主领域中的某些设置吗?任何帮助表示赞赏。
我正在尝试创建一个写入F#
并启用的WebApi项目CORS
.
控制者:
type DoItController() =
inherit ApiController()
[<EnableCors(origins = "*", headers = "*", methods = "Get")>]
[<HttpGet>]
[<Route "api/GetGenerateExcel">]
member __.GetGenerateExcel() =
async {
// Some code
return "It works"
}
|> Async.StartAsTask
}
Run Code Online (Sandbox Code Playgroud)
直接从它工作的浏览器打开它.通过调用它AngularJS
或纯Javascript
我得到401
.
C#中的等效控制器工作原理:
public class DoItController : ApiController
{
[EnableCors("*", "*", "Get")]
[HttpGet]
[Route("api/GetGenerateExcel")]
public async Task<string> GetGenerateExcel()
{
//Some code
return "It works"
}
}
Run Code Online (Sandbox Code Playgroud)
我也查了一下Global.asax
,他们也匹配:
type Global() =
inherit HttpApplication()
static member RegisterWebApi(config: …
Run Code Online (Sandbox Code Playgroud) 我有一个使用Doorkeeper的Rails 4应用程序,要求在大多数控制器中进行身份验证.当我去其中一条限制路线时,我看到一个空白页面.我在终端注意到,Puma说:
过滤链停止为#Proc:0x007fd650803350 @/.../doorkeeper-0.7.2/lib/doorkeeper/helpers/filter.rb:8呈现或重定向已完成401未授权,1ms(ActiveRecord:0.0ms)
我怎样才能捕获这样的401 Unauthorized错误,以便显示自定义页面?我的目标是使用有关如何进行身份验证的消息呈现JSON响应,而不是仅显示空白页面.
仍然遇到类似问题1.3.0和高达1.4.0-alpha.0
在我的情况下(基于docker的设置),无论是trusty还是kubedns都会从api服务器中获得未授权.
奇怪的是,我发现实例内部没有秘密,在路径/var/run/secrets/kubernetes.io/serviceaccount下
[root@ ... ]# kubectl exec -it kube-dns-v13-htfjo ls /bin/sh
/ #
/ # ls /var/run/secrets/kubernetes.io/serviceaccount
/ #
Run Code Online (Sandbox Code Playgroud)
虽然它们似乎在节点和代理实例中
tmpfs on /var/lib/kubelet/pods/3de53b0c-45bb-11e6-9f03-08002776167a/volumes/kubernetes.io~secret/default-token-8axd8 type
tmpfs on /var/lib/kubelet/pods/3de5591e-45bb-11e6-9f03-08002776167a/volumes/kubernetes.io~secret/default-token-8axd8 type
tmpfs on /var/lib/kubelet/pods/f29f35c7-45cc-11e6-9f03-08002776167a/volumes/kubernetes.io~secret/default-token-ql88q type
Run Code Online (Sandbox Code Playgroud)
当然,这导致kubedns无法启动.记录下面
I0709 09:04:11.578816 1 dns.go:394] Received DNS Request:kubernetes.default.svc.cluster.local., exact:false
I0709 09:04:11.578873 1 dns.go:427] records:[], retval:[], path:[local cluster svc default kubernetes]
I0709 09:04:11.579657 1 dns.go:394] Received DNS Request:kubernetes.default.svc.cluster.local., exact:false
I0709 09:04:11.579677 1 dns.go:427] records:[], retval:[], path:[local cluster svc default kubernetes]
E0709 09:04:11.786646 1 reflector.go:216] pkg/dns/dns.go:128: Failed …
Run Code Online (Sandbox Code Playgroud) 我正在使用 RestSharp 进行 GET api 调用。api 调用通过传递授权标头通过 HTTP 基本身份验证进行身份验证。
服务器使用状态代码 307 重定向 api 调用。我的客户端代码确实处理重定向,但授权标头未传递到此重定向的 api 调用。这样做是出于此处提到的正当理由。因此我确实收到了未经授权的错误。
如何配置 RestClient 来恢复授权标头?
var client = new RestClient("https://serverurl.com");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic Z3JvdXAxOlByb2otMzI1");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Tenant-Id", "4892");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Run Code Online (Sandbox Code Playgroud) 我正在用 django 开发一个应用程序,当我尝试使用 auth0 进行登录时,我得到:
"error": {
"message": "Grant type 'authorization_code' not allowed for the client.",
"oauthError": "unauthorized_client",
"type": "oauth-authorization"
}
Run Code Online (Sandbox Code Playgroud)
我已经配置了我的公钥和私钥、登录网址,并且在 auth0 中我已经配置了网址。
此外,我注意到错误可能是在我询问 access_token 时,因为我在访问 auth0.com/oauth/token 时遇到了 http 403 错误。
同时服务器向我发送了这个“GET /complete/auth0?redirect_state=y8oPFziJ01BmdGaRbsRJZod3GZ4dP0hW HTTP/1.1”500 116725
unauthorized ×10
api ×3
c# ×2
access-token ×1
auth0 ×1
bitbucket ×1
cors ×1
crash ×1
django ×1
docker ×1
doorkeeper ×1
encryption ×1
f# ×1
git ×1
httpclient ×1
https ×1
keycloak ×1
kube-dns ×1
kubernetes ×1
lets-encrypt ×1
netbeans ×1
nginx ×1
push ×1
python ×1
restsharp ×1
token ×1
webclient ×1