标签: basic-authentication

API设计:HTTP基本身份验证与API令牌

我目前正在为Web应用程序的公共Web API前面创建一个身份验证系统.鉴于每个用户帐户都有一个API密钥,并且每个请求都必须经过身份验证,我有两种选择:

  1. 使用HTTP基本身份验证,就像GitHub一样.

    请求必须发送到URL

    http://api.example.com/resource/id
    with basic authentication
    username: token
    password: the api key
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将API令牌作为查询字符串参数传递.

    请求必须发送到URL

    http://api.example.com/resource/id?token=api_key
    
    Run Code Online (Sandbox Code Playgroud)

还有第三个选项是在URI中传递令牌,但老实说我不喜欢这个解决方案.

您会采用哪种解决方案?为什么?

architecture authentication api basic-authentication

52
推荐指数
3
解决办法
7万
查看次数

转义基本身份验证URL中的用户名字符

使用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 basic-authentication

50
推荐指数
1
解决办法
3万
查看次数

使用Apache HttpClient进行抢占式基本身份验证4

是否有一种更简单的方法来设置http客户端以进行抢先式基本身份验证,而不是此处描述的内容?
在以前的版本(3.x)中,它曾经是一个简单的方法调用(例如httpClient.getParams().setAuthenticationPreemptive(true)).
我想避免的主要是将BasicHttpContext添加到我执行的每个方法.

java basic-authentication apache-commons-httpclient

48
推荐指数
6
解决办法
7万
查看次数

Go中的基本HTTP身份验证

我正在尝试使用下面的代码进行基本的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)

知道我可能做错了吗?

go basic-authentication

48
推荐指数
2
解决办法
6万
查看次数

如何从标头中检索基本身份验证凭据?

我正在尝试编写一些使用基本身份验证的简单测试用户身份验证机制.如何从标题中检索凭据?

string authorizationHeader = this.HttpContext.Request.Headers["Authorization"];
Run Code Online (Sandbox Code Playgroud)

我从哪里开始?有几个教程,但我是.NET和身份验证的新手,你能在答案中一步一步地解释你正在做什么和为什么.

.net c# authentication basic-authentication

47
推荐指数
2
解决办法
6万
查看次数

基本访问认证是否安全?

使用Apache,可以非常简单地设置一个使用基本访问身份验证的页面来提示用户输入名称/密码,并以某种方式使用这些凭据来授予该用户访问权限.

这是安全的,假设客户端和服务器之间的连接是安全的吗?

http basic-authentication

45
推荐指数
3
解决办法
3万
查看次数

Node.JS中的基本HTTP身份验证?

我正在尝试使用类似于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的情况下获取这些值?

authentication http basic-authentication node.js

45
推荐指数
5
解决办法
6万
查看次数

.htaccess/.htpasswd绕过某个IP地址

是否可以为给定目录设置.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)不会被提示输入密码,但其他人都这样做?

.htaccess apache2 basic-authentication

43
推荐指数
5
解决办法
6万
查看次数

ASP.NET核心中的基本身份验证

如何在ASP.NET Core Web应用程序中实现具有自定义成员身份的基本身份验证?

笔记

  • 在MVC 5中,我使用了本文中的说明,该说明需要在中添加模块WebConfig.

  • 我仍在部署我的新MVC Core应用程序,IIS但这种方法似乎无法正常工作.

  • 我也不想使用内置的IIS支持基本身份验证,因为它使用Windows凭据.

basic-authentication asp.net-core-mvc asp.net-core asp.net-core-1.0

43
推荐指数
5
解决办法
3万
查看次数

HTTP规范:代理授权和授权标头

所以我试图实现以下场景:

  • 应用程序受基本身份验证保护.让我们说它是托管的app.com
  • 在应用程序前面的HTTP代理也需要身份验证.它托管在proxy.com

因此,用户必须在同一请求中为代理和应用程序提供凭证,因此他具有不同的用户名/密码对:一对用于对应用程序进行身份验证,另一对用户/密码对用于对代理进行身份验证.

阅读规范后,我不确定我应该如何实现这一点.我想要做的是:

  1. 用户向代理发出HTTP请求,而不进行任何类型的身份验证.
  2. 代理回答407 Proxy Authentication Required并返回Proxy-Authenticate以下格式的标头:"Proxy-Authenticate: Basic realm="proxy.com".
    问题:此Proxy-Authenticate标题是否正确设置?
  3. 然后,客户端使用Proxy-Authorization标头重试请求,该标头是代理的Base64表示username:password.
  4. 这次代理验证请求,但随后应用程序使用401 Unauthorized标头进行应答.用户由代理进行身份验证,但不是由应用程序进行身份验证.应用程序WWW-Authenticate为响应添加标题WWW-Authenticate: Basic realm="app.com".问题:这个标题值是对的吗?
  5. 客户端再次使用Proxy-Authorization标头和使用Authorization应用程序的Base64表示值的标头重试请求username:password.
  6. 此时,代理成功验证请求,将请求转发给对用户进行身份验证的应用程序.客户终于得到了回复.

整个工作流程是否正确?

authentication specifications http basic-authentication proxy-authentication

42
推荐指数
1
解决办法
5万
查看次数