所以基本上我想用OAuth 2.0保护我的API并实现OAuth提供程序以启用accessTokens等的查询.
可以用JOAuth开箱即用吗?
有没有人用开源库(Java)实现过类似的东西?
术语"资源所有者"是在所定义的OAuth V2.0规范,作为"能够准予访问受保护资源的实体.当资源所有者是人,它被称为最终用户".
我的问题是,什么时候资源所有者不是最终用户?我希望通过可能是真实用例的例子来解释.例如,如果受保护资源是Facebook用户的照片,资源所有者 Facebook或上传照片的Facebook用户是?此外,如果资源所有者(也是一个人)甚至不是正在实施OAuth的应用程序的用户,为什么还要将其视为最终用户?而且,如果Facebook用户是资源所有者,那么Facebook在此交易中扮演什么角色?
我已成功使用Facebook Graph API(使用oauth 2.0进行身份验证)一段时间了.我现在需要编写自己的API,允许开发人员以类似的方式连接到它.我已经调查了各种各样的图书馆,但我想要一些更精简的东西,所以我决定推出自己的图书馆.看看代码我必须在Facebook上验证用户它看起来相对简单,但如果我偏离轨道,请纠正我.
首先,我需要提供一个消费者需要重定向到的安全页面.例如https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL.用户将验证应用程序,然后我将使用查询字符串中的oauth_token重定向回回调回URL中提供的URL.我想我可以在这里为oauth_token生成一个随机唯一字符串,并将其存储在该特定消费者的用户身上(编辑:请参阅下面的答案,这对于每个消费者应用程序而不是用户应该是唯一的).
这是第1步.我现在需要提供第二个安全页面,消费者会触发Web请求.例如https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE.这将允许消费者交换上面返回的oauth_token作为访问令牌.我将再简单地生成一个随机的唯一字符串,并将其存储在针对该特定消费者的用户.
现在我的API将接受access_token用于尝试获取特定于正在使用它的用户的信息的方法.
我想知道我是否理解正确的事情.如果是这样的话,OAuth 2.0规范似乎非常微不足道.为什么我们必须用access_token交换oauth_token?我有自己的想法,但如果有人能帮助澄清这一点,我会很感激.
我非常感谢您的反馈,因为我不希望继续前进,浪费时间实现这一点,当它完全错误时.
谢谢
我正在尝试使用Google作为外部登录提供程序来解决间歇性问题.
尝试登录时,会将用户重定向回登录页面,而不是进行身份验证.
问题出现在这一行(下面的链接第55行),GetExternalIdentityAsync返回null.
var externalIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
Run Code Online (Sandbox Code Playgroud)
完整的代码是:
[Authorize]
public abstract class GoogleAccountController<TUser> : Controller where TUser : Microsoft.AspNet.Identity.IUser
{
public IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
public abstract UserManager<TUser> UserManager { get; set; }
[AllowAnonymous]
[HttpGet]
[Route("login")]
public ActionResult Login(string returnUrl)
{
ViewData.Model = new LoginModel()
{
Message = TempData["message"] as string,
Providers = HttpContext.GetOwinContext().Authentication.GetExternalAuthenticationTypes(),
ReturnUrl = returnUrl
};
return View();
}
[AllowAnonymous]
[HttpPost]
[ValidateAntiForgeryToken]
[Route("login")]
public ActionResult Login(string provider, string returnUrl)
{
return new …Run Code Online (Sandbox Code Playgroud) 我有一个api,它使用OAuth 1.0a来验证使用它的应用程序.它正在取代一个旧的api,它使用了一些被弃用的定制和hodge-podge调用.
众所周知,OAuth 1.0a在(客户端)Javascript中并不安全,因为它依赖于保密的消费者秘密.这是不可能的,因为源始终是可见的.
我们为Chrome,Firefox,IE和Safari提供了浏览器扩展,将来需要使用此API.这些扩展都是大部分或完全用Javascript编写的,因此也存在安全性问题.
这些扩展是内部的,因此可以使用自定义身份验证方法来获取其访问令牌.
我计划实施的内容如下:
它在以下假设下运作:
我的问题是,这是一种限制访问api的安全方法吗?还有更好的吗?
几个笔记. 我知道有一个事实,Chrome扩展可以请求访问您的给定网站的cookie的权限.我相信firefox扩展也可以这样做.
显然,我们不希望我们的cookie可以通过任何页面上的javascript访问,否则我们会暴露自己的XSS攻击,因此它们只需要通过扩展来访问.
我正在实施OAuth提供程序以保护不同的基于Web的API.最头疼的是让我通过OAuth保护WebSockets.
可以在浏览器中设置的客户端中完全安全吗?
与具有服务器的Web应用程序相比,如果它在浏览器中有什么风险?
我想使用2-legged OAuth来限制与websocket的连接,因此只有注册的客户端才能获得与API的WebSocket连接而不被拒绝.由于WebSocket连接始终(!)在客户端(来自浏览器)建立,是否可以保护accessToken不被窃取和滥用?
此时,从Web应用程序客户端appart设置基于浏览器的客户端的唯一方法是URL.
如果基于浏览器的应用程序不安全,我可以忍受,但我想确保至少基于Web的应用程序有一个安全的方式来访问websocket.
但是那时我问自己是否需要accessToken,因为我只能使用origin-URI作为唯一的安全机制.
我正在使用DevDefined库实现OAuth提供程序.我想知道是否有任何推荐的数据库结构用于在服务器端存储使用者和令牌数据.对此有任何建议将不胜感激!
在这个片段中:
@RequestMapping(method = GET)
public List<Place> read(Principal principal) {
principal.getName();
}
Run Code Online (Sandbox Code Playgroud)
principal.getName()给了我用户身份,但我需要一种方法来接收客户端凭据(client =>使用我的API的应用程序).我怎样才能做到这一点?
我正在努力寻找一个可用的gem,为Rails 2.3.5应用程序提供以下内容:
支持3腿和2腿认证也很好.
我找到了那些宝石,但它们都有很大的缺点:
有没有人用这些宝石中的一个或一个组合来达到这些要求?你能帮我指点一下吗?
任何帮助深表感谢!
我目前正在使用微框架Flask在python中编写一个rest API.它是一个私有API,它处理用户数据.我计划使用此API来构建网络和Android应用.
现在我使用摘要身份验证来保护私人用户数据.例如,如果您想使用用户bob在我的服务上发布数据,您可以在myapi/story/create上发布请求,并使用摘要模式提供bob的凭据.
我知道这不是一个好的解决方案,因为:
-Digest auth不安全
- 客户端未经过身份验证(如何保护与当前用户无关的请求,例如创建新用户?)
我阅读了很多关于oAuth的内容,但是三脚认证似乎有点过分,因为我不打算向第三方开放我的API.
2脚oAuth不适合,因为它只为客户提供身份验证,而不是为用户提供身份验证.
oAuth的另一个问题是我没有找到在Python中实现它的综合指南.我找到了python-oauth2库,但我不了解服务器示例,我找不到其他文档.此外,似乎oAuth的许多方面都未包含在此示例中.
所以我的问题是:
任何帮助或建议将不胜感激.
oauth-provider ×10
oauth-2.0 ×6
oauth ×5
c# ×2
security ×2
.net ×1
google-oauth ×1
java ×1
javascript ×1
joauth ×1
python ×1
rest ×1
rubygems ×1
spring ×1
spring-mvc ×1
websocket ×1