嗨我正在使用抄写库与LInkedIn进行OAuth通信.
我有一个登录类和一个查询类.
登录类创建一个服务来获取我的请求令牌和机密,并创建我的访问令牌.然后将访问令牌保存到首选项文件中.这似乎工作正常,我可以在创建所有令牌后成功进行api调用.
在我的OAuth查询类中,我检索访问令牌,创建另一个服务并尝试进行API调用,但是当我加载一个调用此类的活动时,它会导致我的应用程序崩溃.我已经过测试,以确保访问令牌已保存,并且它们是.
这是我的登录类
public class Login_LinkedIn extends Activity
{
SharedPreferences settings;
OAuthService service;
Token requestToken;
Button home;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.webauth);
initControls();
service = new ServiceBuilder()
.provider(LinkedInApi.class)
.apiKey( getString(R.string.apiKey) )
.apiSecret( getString(R.string.secKey) )
.callback( getString(R.string.callBack) )
.build();
requestToken = service.getRequestToken();
final String authURL = service.getAuthorizationUrl(requestToken);
final WebView webview = (WebView) findViewById(R.id.webView);
//attach WebViewClient to intercept the callback url
webview.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
//check for our custom callback …Run Code Online (Sandbox Code Playgroud) 我正在使用Scribe API进行Facebook签名功能,但在提交facebook身份验证网址后出现以下错误.
callback_url = http://localhost:18080/example/pub/social/facebook/signup/step2
OAuthService service = new ServiceBuilder().provider(FacebookApi.class)
.apiKey(apiKey).apiSecret(apiSecret)
.scope("email")
.callback(callbackUrl).build();
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
return "redirect:" + map.get("AUTHORIZATION_URL");
OAuthService service = new ServiceBuilder().provider(FacebookApi.class)
.apiKey(apiKey).apiSecret(apiSecret).build();
Verifier verifierObj = new Verifier(verifier);
//String s = getAccesstoken(verifier);
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifierObj)
Run Code Online (Sandbox Code Playgroud)
我得到的错误@最后一行
响应正文不正确.无法从中提取令牌:'{"error":{"message":"redirect_uri不是绝对URI.请检查RFC 3986.","type":"OAuthException","code":191}} "
设置n facebook app:
**Website with Facebook Login** : http://localhost:18080/example/
App domain : localhost
Run Code Online (Sandbox Code Playgroud)
如果我在任何地方都错了,请告诉我...抄写和facebook平台新手.
谢谢Raj
我目前正在将Reddit OAuth2登录到我的网络应用程序中.握手和令牌交换在本地测试时工作正常但在服务器上运行时(托管在'OpenShift'DIY盒式磁带上)我收到以下错误:
java.security.InvalidAlgorithmParameterException: Prime size must be
multiple of 64, and can only range from 512 to 1024 (inclusive)
Run Code Online (Sandbox Code Playgroud)
结果如何
java.lang.RuntimeException: Could not generate DH keypair
Run Code Online (Sandbox Code Playgroud)
我一直在搜索大部分时间并找到了不同的解决方案,从更改Java版本到使用BouncyCastle.但是,我正在使用Scribe库,所以我不认为我可以实现BouncyCastle而不用分叉和改变划线的基础,这样做会破坏它的目的.
安装JCE Unlimited Strength也出现了,但我不能在OpenShift上做到这一点,因为没有root访问权限(可能能够让他们的团队中的一个人去做).
正在使用的java版本(取自java -version):
本地试验机:
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)
OpenShift服务器:
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-i386 u51-b02)
OpenJDK Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我无法解决这个问题.希望我是愚蠢或误解的东西,所以任何可能的解决方案都会很棒!
-
编辑1
返回错误的请求代码(正如我所提到的,使用Scribe,因此可能没什么用处).令牌端点正在https://ssl.reddit.com/api/v1/access_token使用POST.正如我上面所说,这适用于我的测试机器.
OAuthRequest request …Run Code Online (Sandbox Code Playgroud) 我已经能够使用Scribe API从Vimeo成功获取访问令牌.
但是,当我尝试访问受保护的资源时,我收到无效的签名错误.我OAuthService用来尝试访问受保护资源,我看起来像:
OAuthService service = new ServiceBuilder()
.provider(VimeoApi.class)
.apiKey(APIKEY)
.apiSecret(API_SECRET)
.signatureType(SignatureType.QueryString)
.build();
Run Code Online (Sandbox Code Playgroud)
然后,我发出请求,执行以下操作:
OAuthRequest orequest = new OAuthRequest(Verb.GET, "http://vimeo.com/api/rest/v2");
orequest.addBodyParameter("method", "vimeo.videos.upload.getQuota");
Run Code Online (Sandbox Code Playgroud)
这失败了,告诉我签名无效.
我被客户要求将他们LinkedIn组中的最新帖子提取到我们的网站页面之一.
我正在使用ColdFusion 9进行开发,并且已经研究了这几天了,并决定在这里发布我的查询,希望有人能够帮助我.
我可以达到我有一个requestToken的地步.我的理解是,我现在需要签署请求令牌以获取accessToken.我的问题是我需要在幕后做这件事.但是,我能找到的所有示例都是将前端用户重定向到授权URL以允许用户进行身份验证,但我不希望用户进行身份验证,我想要对服务器端进行身份验证.
我正在尝试使用Scribe Java包装器库.下面是我到目前为止获取requestToken(以及授权URL)的代码.我需要有人指出我在正确的方向上签署服务器端代码上的令牌,以便我可以进行必要的调用以使用Groups API(例如http://api.linkedin.com/v1/groups/{id}/posts?count=5&start=1)
<cfscript>
var l = {};
//The LinkedIn public and private keys for application
l.oauth_consumer_key = "[My public key]";
l.oauth_sign_key = "[My secret key]";
l.serviceBuilder = CreateObject("java","org.scribe.builder.ServiceBuilder");
l.LinkedInApiClass = CreateObject("java", "org.scribe.builder.api.LinkedInApi").getClass();
l.service = l.serviceBuilder.provider(l.LinkedInApiClass).apiKey(l.oauth_consumer_key).apiSecret(l.oauth_sign_key).callback("[My callback url]").build();
l.requestToken = l.service.getRequestToken();
l.authUrl = l.service.getAuthorizationUrl(l.requestToken);
// I NEED TO DEFINE WHAT TO DO AT THIS POINT TO SIGN THE REQUEST SERVER SIDE
...
...
</cfscript>
Run Code Online (Sandbox Code Playgroud) 我是java编程的新手,我收到了很多错误的"ClassNotFoundException"错误.
奇怪的是它编译得很好:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行它时,我收到以下错误:
steve@steve-ThinkPad-T61:~/facebook$ java FacebookProg
Exception in thread "main" java.lang.NoClassDefFoundError:
org/scribe/builder/ServiceBuilder
at FacebookProg.main(FacebookProg.java:8)
Caused by: java.lang.ClassNotFoundException: org.scribe.builder.ServiceBuilder
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我在网上查了一下,似乎java无法在运行时找到它能够在编译时找到的库.所以尝试了以下变化:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
java -cp /usr/share/java/ FacebookProg
export CLASSPATH="/usr/share/java"; java FacebookProf
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
Run Code Online (Sandbox Code Playgroud)
我检查了StackOverflow和google上的几个地方,仍然无法找出原因.我是java的新手,所以可能有一个简单的解决方案,但我找不到它.我在Ubuntu 11.04上使用Sun Java 1.6 64位.scribe-1.3.0.jar文件位于"/ usr/share/java"中,我相信它是放置java包的规范位置.
准系统代码在这里(如果它很重要):
import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.oauth.*;
public class FacebookProg {
public static void main (String args[]) {
OAuthService …Run Code Online (Sandbox Code Playgroud) 我使用Scribe-Java使用OAuth2连接到Google Plus.我能够验证我的应用程序并获得用户的许可,但是当我尝试访问除了以外的任何内容时userinfo,我收到此异常.
403
{
"错误":{
Run Code Online (Sandbox Code Playgroud)"errors": [ { "domain": "usageLimits", "reason": "accessNotConfigured","message": "Access Not Configured" } ], "code": 403, "message": "Access Not Configured" } }
我已将应用程序的范围设置https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile为访问用户的配置文件我正在使用此URL:
https://www.googleapis.com/plus/v1/people/{userid}/activities/public
你能告诉我我做错了什么吗?我需要在这里使用其他范围来访问配置文件吗?
我使用Scribe(OAuth1.0)作为一种机制,以便用户可以使用他们的Twitter帐户对我的GWT/GAE应用程序进行身份验证.
根据https://dev.twitter.com/docs/auth/implementing-sign-twitter,有3种可能的情况:a /用户已签名并获得批准.在这种情况下,Twitter应该将用户透视地重定向回我的应用程序URL,b /用户已登录但未授权,或者c/user未登录
当Twitter返回我的应用程序(回调)时,我使用verifier参数从twitter读取用户数据,我用它来确定我的应用程序中的用户.
所有这些工作正常,除了以下内容:
情景a /对我不起作用.尽管用户已经授权我的应用程序读取他的用户数据,但Twitter似乎不记得这一点,并再次要求授权访问.(方案b /).
我对Scribe很新,但是当我尝试通过Twitter进行身份验证时,一个奇怪的错误就会上升.我的代码与TwitterExample完全相同:
OAuthService service = new ServiceBuilder()
.provider(TwitterApi.class)
.apiKey("XXXXXXXXXXXXXX<<custom>>XXXXXXXXXXXXXXX")
.apiSecret("YYYYYYYYYYYYYYYY<<custom>>YYYYYYYYYYYYYYYYYYYYYYYYY")
.debug()
.build();
Token requestToken = service.getRequestToken();
Log.i("OAUTH LINK", service.getAuthorizationUrl(requestToken));
Verifier verifier = new Verifier("verifier you got from the user");
Token accessToken = service.getAccessToken(requestToken, verifier);
OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
service.signRequest(accessToken, request);
response = request.send();
Log.i("OAUTH RESPONSE",response.getBody());
Run Code Online (Sandbox Code Playgroud)
返回的调试输出是:
我们正在尝试与另一家公司的自定义API建立联系,该API使用两条腿OAuth来验证请求并向我们发送回复.
目前我们的代码是发送一个请求,但它没有在另一端进行身份验证,因此发送了一个UNAUTHORIZED响应.
如其他公司所述,认证包括以下步骤.
"使用两条腿OAuth身份验证处理身份验证:
All requests must include both an oauth_consumer_key and an oauth_signature attribute submitted via the HTTP GET method.
The oauth_consumer_key attribute will be the user name that the user uses to access our web site.
The oauth_signature attribute is obtained by signing the request with the OAuth signature method for HMAC-SHA1 encryption. The signature is generated using both the oauth_consumer_key attribute and the consumer secret. A single consumer secret is required per franchise and can be obtained …Run Code Online (Sandbox Code Playgroud) scribe ×10
java ×6
oauth ×4
linkedin ×2
oauth-2.0 ×2
android ×1
classpath ×1
coldfusion ×1
facebook ×1
google-plus ×1
linkedin-api ×1
openshift ×1
ssl ×1
twitter ×1
vimeo ×1