用例:
命令行应用程序(部署到第三方机器)需要能够通过GitHub API(v3)下载属于组织的私有仓库的tarball副本
应用程序应该只能访问这个私有仓库,而不能访问具有只读权限的其他仓库.
我已经能够通过在我的github帐户上注册client_id/secret后为应用程序创建授权来完成(1).但是,授权返回的令牌似乎不允许对repo进行只读访问,也不限于一个repo(例如,一个repo可能会使用该令牌来修改此repo以及属于该组织的其他repo).
是否可以通过适当的范围限制访问?我没有在API文档中看到任何相关内容(https://developer.github.com/v3/oauth/#scopes).
我打算创建一个使用JavaScript的应用程序,它需要使用OAuth来验证网站的用户身份.有人可以帮帮我吗?任何示例代码?我知道Google Code Javascript OAuth库,但我不知道如何实现它.
我正在尝试使用NodeJS上的OAuth进行身份验证,我收到此错误:
获取OAuth请求令牌时出错:{statusCode:401,data:'\n \n桌面应用程序仅支持oauth_callback值\'oob \'\n/oauth/request_token \n \n'}
这是我的代码(server.js)
var express = require('express');
var util = require('util');
var oauth = require('oauth');
var app = express.createServer();
// Get your credentials here: https://dev.twitter.com/apps
var _twitterConsumerKey = "1";
var _twitterConsumerSecret = "2";
var consumer = new oauth.OAuth(
"https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token",
_twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1");
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.use(express.logger());
app.use(express.cookieParser());
app.use(express.session({ secret: "very secret" }));
app.use(function(req, res, next) {
res.locals.user = req.session.user;
next();
});
});
app.get('/sessions/connect', function(req, res){
consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, …Run Code Online (Sandbox Code Playgroud) 我正在将Google Oauth2添加到Rails应用程序中,但无法超越早期阶段.
我已经设置了一个应用程序,并定义了客户端ID和秘密.但我得到了 Invalid parameter value for redirect_uri: Non-public domains not allowed: http://localhost/path/to/callback
这是什么意思?这是因为我正在测试本地开发环境吗?
谢谢你的任何想法.
编辑
这可能是因为应用程序的URI与发送URI不同.但是,当我去谷歌并尝试授权我的开发应用程序的路径时,我得到了OAuth2 redirect is invalid.这是使用本地托管应用程序的限制吗?
编辑2
我生成的请求看起来像这样:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=###########&redirect_uri=http%3A%2F%2Fmyapp.dev%2Fusers%2Fauth%2Fgoogle_oauth2%2Fcallback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&approval_prompt=&access_type=offline
Run Code Online (Sandbox Code Playgroud)
它是否正确.我用client_id尝试了这个,包括并排除了.apps.googleusercontent.com部分.似乎都没有用.
使用OAuth时(2)我需要在我的应用程序中使用重定向端点,一旦我通过身份验证,OAuth提供服务就可以重定向到该端点.
如何在单页面应用程序中处理此问题?当然,重定向到OAuth提供服务并不好,甚至可能无法重定向.
我知道OAuth还支持基于用户名/密码的令牌生成.这与AJAX调用完美配合,但要求我的单页应用程序要求输入用户名和密码.
你通常如何处理这个?
我正在尝试在我的REST服务中实现会话管理.我在冲浪时了解了这些指南:
不使用服务器端会话 - 它违反了RESTful原则.
使用HTTP基本身份验证 - 现在不可能,因为我被要求不使用SSL/TLS(毫无疑问需要Basic身份验证.)
使用Http摘要 - 我听说这会增加网络流量.这听起来很昂贵,尤其是当我的客户端是移动设备时.
使用cookies - 我被告知我不应该依赖cookie来保护我的重要资源,它们可以很容易地被欺骗.另外,我通过cookie了解了跨站点脚本攻击.
我留下了生成身份验证令牌的选项,用户每次都必须发送 - 我承认这不是"完全"RESTful.
现在我需要知道,我应该如何生成这些唯一的身份验证令牌,这些令牌在业务级别上足够安全?泽西岛有一些图书馆吗?我应该去OAuth.我刚刚读了一些关于它们的内容,它们对我来说有用吗?请记住,我的目标客户端是移动设备 - 他们可以访问OAuth服务吗?
我的Android应用程序包含Twitter API的OAuth消费者秘密.目前它.properties以纯文本形式存档,因此有人无需花费精力在APK中查找.
我是否应该采取措施来掩盖它(例如,rot13或存储在混淆的Java代码中)?或者我应该避免做任何这样的事情,因为它会造成虚假的安全感?
人们通常如何在Android应用中分发/存储OAuth秘密?这个秘密被盗和被滥用的常见程度如何?
我开始设计REST Web服务,并且不清楚最佳的身份验证方法.该服务将允许个人用户访问/管理他们自己的数据,因此需要某种类型的用户身份验证.我一直在看这些选项:
OAuth似乎更多的是授权而不是身份验证.我计划在服务中本地处理授权,所以我不是在寻找解决方案.但是,OAuth是否也适用于身份验证?
OpenID当然提供了身份验证的解决方案,但这更适合允许用户使用他们的第三方凭据(谷歌,雅虎等)虽然我想支持这一点,但这不是我主要关注的问题,我会绝对允许用户使用本机凭据(电子邮件/密码)注册.
这很容易实现,但我的理解是,这可能不是一个非常安全的方法.此外,似乎需要为每次访问交换凭据,但我更希望用户进行一次身份验证,然后通过会话令牌继续访问.
基本上,滚动我自己的登录/令牌生成服务,并需要一个有效的令牌来访问所有其他资源(显然,一切都将通过SSL).
除了创建Web服务之外,我还将构建一个代表用户使用这些服务的客户端(Web)应用程序,但我不希望应用程序必须存储用户信息/凭据等.所以,像这样:
用户(使用电子邮件/密码或第三方凭据进行身份验证) - > Web应用程序(使用应用程序ID进行身份验证) - > Web服务
而且,我想让其他人也建立客户端,所以中间层可以是任何第三方应用程序:
用户(使用电子邮件/密码或第三方凭据进行身份验证) - >第三方应用程序(使用应用程序ID进行身份验证) - > Web服务
我的顶级要求是:
所以,我的问题是,基于上述情况(如果这太模糊,请告诉我),是否有"最佳"方法?OAuth或OpenID是否合适,或者我是否过于复杂,而应该只使用自己的身份验证?
编辑:
我想我需要实现以下内容:
1)原生凭证/令牌(通过SSL进行HTTP基本身份验证?)
2)OpenID"依赖方"允许我的api使用其他地方托管的OpenID(即"支持第三方凭证")
3)OAuth"Consumer"允许我的api访问第三方服务(比如访问用户的LinkedIn个人资料).
4)一个OpenID"提供者",允许人们在别处使用api的本地ID(可选)
5)OAuth"提供商"允许第三方应用代表用户访问我的API(可选)
这看起来是对的,还是我让它变得比它需要的更复杂?
我正在尝试使用开发人员文档来使用Instagram OAuth
https://www.instagram.com/developer/authentication/.
第1步和第2步没有任何问题,所以我有我Client-ID的Client-Secret,所有Redirect-URI和代码.
但每次我试图得到Acces Token我得到以下错误:
{
"code": 400,
"error_type": "OAuthException",
"error_message": "Matching code was not found or was already used."
}
Run Code Online (Sandbox Code Playgroud)
任何提示如何解决这个问题?
OAuth 2.0定义了客户端请求发送的"状态"参数,以防止跨站点请求攻击.在OpenID规范中提到"nonce"也是如此.除了在ID令牌而不是查询参数中返回"nonce"这一事实之外,它们看起来服务于完全相同的目的.如果有人能解释他们为何分开