在我的Android应用程序中,我试图从GoogleAuthUtil获取AccessToken,如下所示:
accessToken = GoogleAuthUtil.getToken(this,mPlusClient.getAccountName(),"oauth2:"+ SCOPES);
但在这一行我得到的错误如下:
E/GoogleAuthUtil(4696):调用此从你的主线程可以导致死锁和/或ANR的E/GoogleAuthUtil(4696):java.lang.IllegalStateException:调用该从你的主线程可以导致死锁E/GoogleAuthUtil(4696) :在com.google.android.gms.auth.GoogleAuthUtil.b(未知来源)E/GoogleAuthUtil(4696):在com.google.android.gms.auth.GoogleAuthUtil.getToken(未知来源)E/GoogleAuthUtil(4696) :at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
任何这个问题的解决方案?任何帮助将不胜感激.
我使用创建令牌http://localhost:8080/auth/realms/{realm_name}/protocol/openid-connect/token endpoint。
grant_type=client_credentials
客户端 ID: ------------
客户端秘密:78296d38-cc82-4010-a817-65c283484e51
现在我想获得领域的用户。然后我http://localhost:8080/auth/admin/realms/{realm_name}/users?username=demo使用令牌向端点发送请求。但我得到了403 forbidden回应"error": "unknown_error"。怎么解决呢?
Facebook APP访问令牌是否过期?这些令牌与USER令牌不同; 他们是这样获得的:
https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={0}&client_secret={1})
Run Code Online (Sandbox Code Playgroud)
如http://developers.facebook.com/docs/authentication/上文档的App Login部分所述.
在任何情况下他们都会失效吗?
注意:这不是关于USER访问令牌的问题(已明确记录).有一个相同的问题http://facebook.stackoverflow.com/questions/7322063/does-app-login-access-token-expire错误地关闭了另一个关于USER访问令牌的问题的副本.
我正在尝试获取访问令牌以使用Google Play Android Developer API,而且我使用Google API Java客户端文档示例了解到这一点:
HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
JsonFactory JSON_FACTORY = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("...gserviceaccount.com")
.setServiceAccountScopes("https://www.googleapis.com/auth/androidpublisher")
.setServiceAccountPrivateKeyFromP12File(keyFile)
.build();
Run Code Online (Sandbox Code Playgroud)
但是如何从此凭据获取访问令牌?credential.getAccessToken()回报null.我做错了什么,或者错过了一些步骤?
我有一个应用程序,目前使用Spring OAuth 2.0 In Memory Token Store.我需要将Spring Security OAuth 2.0 JAR转换为使用持久文件而不是内存来确保访问令牌在服务器重新启动时有效.Spring OAuth 2.0 JAR提供了使用JdbcTokenStore方法支持MYSQL数据库的例程,但是我无法找到任何文档来说明如何更改默认配置(使用InMemoryTokenStore方法)来使用支持的Jdbc方法.
我想听一下已经实现了Spring Security OAuth 2.0 JdbcTokenStore方法的人,并且可以提供执行此操作所需的配置示例,或者可以指向描述该过程的文档.我在互联网上搜索高低,但找不到任何此类文档.
我已经为Token Store找到了Spring Security OAuth 2.0模式文件,如果有人感兴趣,只能在Test Resource目录中找到它.任何Pivotal文档网站都没有记录它的存在.如果有必要,我可以阅读其余的Pivotal源代码,但我希望有人可以免除必须使用这条路径.
提前感谢您提供的任何帮助.
即使没有来自linkedIn的这种特定于android的sdk(如facebook和twitter sdk for android).使用Oauth 1.0设置linkedIn授权仍然很容易使用:
但与Oauth2.0授权不一样的故事.没有太多有用的库或Android特定的例子.我试过用这些:
我已经读过Oauth 2.0比1.0更容易实现.我仍然无法这样做.
在Android中为LinkedIn实现Oauth2.0的任何指示?
我有一个由Angular提供的Web API项目,我希望使用JWT令牌来保护它.我已经进行了用户/通过验证,所以我认为我只需要实现JWT部分.
我相信我已经确定了JwtAuthForWebAPI所以使用它的一个例子会很棒.
我假设任何未使用[Authorize]修饰的方法都会像往常一样运行,并且如果客户端传递的令牌不匹配,则[Authorize]修饰的任何方法都将为401.
我还不知道如何在初始身份验证时将令牌发送回客户端.
我正在尝试使用魔术字符串开始,所以我有这个代码:
RegisterRoutes(GlobalConfiguration.Configuration.Routes);
var builder = new SecurityTokenBuilder();
var jwtHandler = new JwtAuthenticationMessageHandler
{
AllowedAudience = "http://xxxx.com",
Issuer = "corp",
SigningToken = builder.CreateFromKey(Convert.ToBase64String(new byte[]{4,2,2,6}))
};
GlobalConfiguration.Configuration.MessageHandlers.Add(jwtHandler);
Run Code Online (Sandbox Code Playgroud)
但我不确定最初是如何回到客户端的.我想我理解如何在客户端上处理这个问题,但是如果你还可以展示这种交互的Angular方面,那么也可以获得奖励积分.
我正在为基于浏览器的Javascript Web应用程序构建一个基于JWT(JSON Web Token)的身份验证机制,与无状态服务器(没有用户会话!)一起工作,我想知道,如果使用存储,一劳永逸我在cookie中的 JWT令牌将保护我的令牌免受XSS攻击,或者如果没有保护,那么在我的Javascript应用程序中使用浏览器本地存储没有任何真正的优势.
我已经在SO和许多博客中看到了这个问题并得到了回答,但我从未见过真正满足我的答案.
这个问题最初是在征求意见的基础上进行的 - 并且考虑到我原来的措辞,这是正确的.因此,让我在此处明确表示,我不希望基于开发人员懒惰等模糊概念的观点 - 这就是基本规则要消除的意义.我想要的是证据支持的是/否答案.或者:
所以我要用一些简化的基本规则来重述这个问题,并提前指出漏洞,这样你,专家,可以让我直截了当.
你的应用程序是一个javascript浏览器应用程序 - 它可能在AngularJS中,但它可能是定制的.它通过REST调用与服务器通信.比方说,jQuery $ ajax调用.
服务器是无状态的:没有会话管理.
应用程序用户JWT作为主要身份验证令牌(OAuth2用语中的"访问令牌")并使用秘密签名密钥在服务器上验证它们
忽略cookie的其他重要优点:浏览器管理,编码不良的可能性较小等.对于这场战斗,我想考虑绝对的安全性,并假设我们可以胜任编码任何一种机制.
忽略cookie的其他缺点,例如非浏览器应用程序等.对于这场战斗,我们只关注基于浏览器的JavaScript应用程序.
是否使用标头或请求主体以非cookie方式传输令牌并不重要; 如果您使用本地存储与会话存储也不重要 - 忽略那里的任何安全差异.是的,我知道技术上Cookies使用标题,忽略它.
简而言之,我们只对比较浏览器处理令牌与您的-javascript-handle-tokens以及比较XSS和CSRF安全风险感兴趣.
在红色角落,Auth0:Local Storage击败了Cookie,因为XSS比CSRF更容易修复
在蓝角,Stormpath:Cookies击败标题,因为实际上CSRF比XSS更容易修复.
(以下详细介绍两个论点)
XSS和CSRF(我们将交替使用CSRF和XSRF:C似乎在文档中更受欢迎,代码中的X)
这是我对攻击类型的超简化摘要:
让我们假设您的无状态,JWT认证的javascript浏览器应用程序用于网上银行,攻击者"Evil Corp"想要提交一个AJAX REST调用,通过冒充您的用户将资金转移到他们的帐户.
XSS (跨站点脚本)
(正如Stormpath指出的那样,有很多攻击向量 - 我会选择一个)
Evil Corp购买用于密码输入的漂亮文本字段小部件的github帐户权限.他们知道您的银行网站使用它,因此当您输入密码并按Enter键时,他们会更新它以提交AJAX请求以将资金转移到他们的帐户.您的构建系统愚蠢地提取更新并投入生产.
CSRF (跨站请求伪造)
Evil Corp知道您的银行网站使用cookie中的JWT来验证交易,因此他们编写了一个Web应用程序,提交AJAX请求以将资金转移到他们的帐户.他们在他们自己的evil.com网站上托管这个网站,当你碰巧在另一个标签中登录你的银行网站时,用一个电子邮件(网络钓鱼)或其他方式引诱你.浏览器提交来自evil.com的请求,但是附上你的JWT,因为它会进入正确的站点:银行.
对XSS防御是要非常小心在你的网站上的代码,这样你永远不会让浏览器进程东西在用户类型,而消毒它(删除JavaScript和HTML)以及所有的第三方库(邪恶的文本字段部件)在使用之前经过审查.正如Stormpath正确地指出的那样,这很难,接近不可能.
对CSRF的防御是使用双提交cookie的形式.这意味着我们的服务器创建一个令牌(安全地随机字符串)和(按照惯例称之为"XSRF-TOKEN")以可读的cookie发送到我们的JavaScript浏览器的应用程序,以及我们的JavaScript的每个请求发回的标题或正文.
实际上,double-sumbit-cookie只是一个防御agasint CSRF,但其他一些需要有状态的服务器会话,没有其他(我认为!)提供更好的保护.无状态可以通过将令牌放在JWT中并将其在服务器端与头部或主体中的令牌进行比较来实现.
但真正的CSRF破坏质量的这种防御,就是同源策略意味着只有我们的应用程序从我们的域加载的javascript 才能读取该cookie.因此,即使evilcorp.com上的javascript可以发送我们的cookie及其请求,它也无法嵌入我们的XSRF-TOKEN,因为它首先无法读取它.
要真正简化CSRF:
在身份验证之后,我可以从服务器访问令牌,"uyhjjfjfgg567f8fhjkkf"现在我想将其安全地保存在设备中.我查看了android开发者网站中的Keystore和Keychain.我不清楚它是如何工作的以及我们应该如何从密钥库中检索令牌.
KeyPairGenerator kpg = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");
kpg.initialize(new KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
.setDigests(KeyProperties.DIGEST_SHA256,
KeyProperties.DIGEST_SHA512)
.build());
KeyPair kp = kpg.generateKeyPair();
/*
* Load the Android KeyStore instance using the the
* "AndroidKeyStore" provider to list out what entries are
* currently stored.
*/
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
Enumeration<String> aliases = ks.aliases();
Run Code Online (Sandbox Code Playgroud) 使用eBay令牌认证已经挣扎了几天.我发现很难理解如何获取新令牌,在注册开发者计划帐户后,我请求了密钥集并获得了它们,之后我授权访问Auth'n'Auth令牌,该令牌有望持续18个月,是的,令牌仅适用于交易,购物和寻找API.
但是当你需要执行购买,销售和商业API时,你必须获得oauth令牌.您可以执行所谓的"单用户应用程序"样式并从用户令牌工具登录oauth,并获得2小时到期的oauth.
稍后,令牌过期,你有点失去了上面提到的api的访问权限.我尝试从交易>获取会话ID,交易>获取令牌中获取令牌,但在向Fetch令牌提供会话ID后,它说:"最终用户尚未完成Auth&Auth签名流程." 虽然有一个有效的18个月令牌,但它会一直返回此错误.
有没有关于此的任何示例文章,任何人都可能阅读或写过?
access-token ×10
android ×3
oauth-2.0 ×3
jwt ×2
c# ×1
cookies ×1
credentials ×1
deadlock ×1
ebay-api ×1
google-api ×1
google-plus ×1
javascript ×1
keycloak ×1
linkedin ×1
oauth ×1
rest ×1
security ×1
token ×1