我目前正在为Web应用程序的公共Web API前面创建一个身份验证系统.鉴于每个用户帐户都有一个API密钥,并且每个请求都必须经过身份验证,我有两种选择:
使用HTTP基本身份验证,就像GitHub一样.
请求必须发送到URL
http://api.example.com/resource/id
with basic authentication
username: token
password: the api key
Run Code Online (Sandbox Code Playgroud)将API令牌作为查询字符串参数传递.
请求必须发送到URL
http://api.example.com/resource/id?token=api_key
Run Code Online (Sandbox Code Playgroud)还有第三个选项是在URI中传递令牌,但老实说我不喜欢这个解决方案.
您会采用哪种解决方案?为什么?
使用http基本身份验证时,用户名可以在URL中传递,例如
http://david@foo.com/path/
Run Code Online (Sandbox Code Playgroud)
但现在假设用户名是电子邮件地址,例如david@company.com.这样做显然含糊不清:
http://david@company.com@foo.com/path/
Run Code Online (Sandbox Code Playgroud)
有没有办法逃脱用户名中的@字符?我尝试过标准的URL编码:
http://david%40company.com@foo.com/path/
Run Code Online (Sandbox Code Playgroud)
但那没有做到.
是否有一种更简单的方法来设置http客户端以进行抢先式基本身份验证,而不是此处描述的内容?
在以前的版本(3.x)中,它曾经是一个简单的方法调用(例如httpClient.getParams().setAuthenticationPreemptive(true)).
我想避免的主要是将BasicHttpContext添加到我执行的每个方法.
我正在尝试使用下面的代码进行基本的HTTP身份验证,但它会抛出以下错误:
2013/05/21 10:22:58获取mydomain.com:不支持的协议方案""退出状态1
func basicAuth() string {
var username string = "foo"
var passwd string = "bar"
client := &http.Client{}
req, err := http.NewRequest("GET", "mydomain.com", nil)
req.SetBasicAuth(username, passwd)
resp, err := client.Do(req)
if err != nil{
log.Fatal(err)
}
bodyText, err := ioutil.ReadAll(resp.Body)
s := string(bodyText)
return s
}
Run Code Online (Sandbox Code Playgroud)
知道我可能做错了吗?
我正在尝试编写一些使用基本身份验证的简单测试用户身份验证机制.如何从标题中检索凭据?
string authorizationHeader = this.HttpContext.Request.Headers["Authorization"];
Run Code Online (Sandbox Code Playgroud)
我从哪里开始?有几个教程,但我是.NET和身份验证的新手,你能在答案中一步一步地解释你正在做什么和为什么.
使用Apache,可以非常简单地设置一个使用基本访问身份验证的页面来提示用户输入名称/密码,并以某种方式使用这些凭据来授予该用户访问权限.
这是安全的,假设客户端和服务器之间的连接是安全的吗?
我正在尝试使用类似于Joyent使用的NodeJS编写REST-API服务器,除了我无法验证普通用户的身份验证之外,一切正常.如果我跳到终端并且这样做curl -u username:password localhost:8000 -X GET,我就无法在NodeJS http服务器上获得值username:password.如果我的NodeJS http服务器是这样的
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
Run Code Online (Sandbox Code Playgroud)
,我不应该在来自回调的req对象中获取值username:password 吗?如何在不使用Connect的基本http auth的情况下获取这些值?
是否可以为给定目录设置.htaccess/.htpasswd访问控制设置,但如果它们来自特定IP地址,则绕过登录/密码身份验证?
我知道你可以在.htaccess文件中做这样的事情:
order deny,allow
deny from all
allow from 000.000.000.000
Run Code Online (Sandbox Code Playgroud)
但是如果你沿着这些方向添加一些东西:
AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user
Run Code Online (Sandbox Code Playgroud)
然后它会提示输入密码.有没有办法做一个if/else类型设置,或其他一些解决方案,以便用户作为给定的IP(或一组IP)不会被提示输入密码,但其他人都这样做?
题
如何在ASP.NET Core Web应用程序中实现具有自定义成员身份的基本身份验证?
笔记
basic-authentication asp.net-core-mvc asp.net-core asp.net-core-1.0
所以我试图实现以下场景:
app.comproxy.com因此,用户必须在同一请求中为代理和应用程序提供凭证,因此他具有不同的用户名/密码对:一对用于对应用程序进行身份验证,另一对用户/密码对用于对代理进行身份验证.
阅读规范后,我不确定我应该如何实现这一点.我想要做的是:
407 Proxy Authentication Required并返回Proxy-Authenticate以下格式的标头:"Proxy-Authenticate: Basic realm="proxy.com".Proxy-Authenticate标题是否正确设置?Proxy-Authorization标头重试请求,该标头是代理的Base64表示username:password.401 Unauthorized标头进行应答.用户由代理进行身份验证,但不是由应用程序进行身份验证.应用程序WWW-Authenticate为响应添加标题WWW-Authenticate: Basic realm="app.com".问题:这个标题值是对的吗?Proxy-Authorization标头和使用Authorization应用程序的Base64表示值的标头重试请求username:password.整个工作流程是否正确?
authentication specifications http basic-authentication proxy-authentication