无法访问令牌linkedin Oauth

时间:2018-09-25 14:54:14

标签: api sapui5 linkedin

我知道有些人会发表这样的评论,就像这篇文章是许多问题的重复,但是我已经尝试了许多方法来在linkedin Oauth中实现访问令牌。解释我的尝试。

1)我关注的是官方文档的Linkedin Oauth2

2)我成功地从步骤2获取了授权代码,并将该代码传递给了步骤3,以交换用于获取访问令牌的Auth代码。但是我收到以下错误 {“ error_description”:“缺少必需的参数,包括无效的参数值,参数多次。。:无法检索访问令牌:appId或重定向uri与授权码不匹配或授权码已过期”,“错误”: “ invalid_request”}

3)根据某些链接,我需要在标题中设置内容类型。Link which tells to set content-type is missing

4)然后我尝试调用https://www.linkedin.com/uas/oauth2/accessToken而不是POStGET的服务。并将数据作为queryParams传递。

5)有些link说oauth代码会在20秒内过期,因此我已经检查过,我在不到1秒的时间内发出访问令牌的呼叫。

6)如果我在如下所示的Body参数中传递数据,并使用url作为https://www.linkedin.com/uas/oauth2/accessToken

var postData = {
                grant_type: "authorization_code",
                code: authCode,
                redirect_uri: 'https%3A%2F%2Foauthtest-mydeployed-app-url',
                client_id: 'my_client_id',
                client_secret: 'secret_key'
            };

7)用Get呼叫我尝试过的网址 https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='+authCode+'&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&client_id=my_client_id&client_secret=secret_key

即使状态码为200,我仍然遇到错误,但我仍然收到该错误(使用GET API) 并且如果POSt通过在正文中传递postData,则表示我收到了错误的请求400状态代码

不理解为什么我没有访问代码。我已经阅读了许多解决方案。 根据要求共享代码。

sap.ui.define([
	"sap/ui/core/mvc/Controller",
	"sap/m/MessageToast"
], function (Controller, MessageToast) {
	"use strict";

	return Controller.extend("OauthTest.OauthTest.controller.View1", {
		onPress: function (evt) {
			var sPath =
				'https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=my_client_id&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&state=DCEeFWf45A53sdfKef424&scope=r_basicprofile';
			window.location.href = sPath;
            var oRouter = new sap.ui.core.UIComponent.getRouterFor(this);
			oRouter.navTo("View2", {
				"username": "Test"
			});
			MessageToast.show(evt.getSource().getId() + " Pressed");
		},
		
		//after user allows access, user will be redirected to this app with code and state in URL
		//i'm fetching code from URL in below method(call is happening in max.569ms)
		
		onAfterRendering: function () {
			var currentUrl = window.location.href;
			var url = new URL(currentUrl);
			var authCode = url.searchParams.get("code");
			if (authCode !== undefined && authCode !== null) {
				var postData = {
					grant_type: "authorization_code",
					code: authCode,
					redirect_uri: 'https%3A%2F%2Foauthtest-mydeployed-app-url',
					client_id: 'my_client_id',
					client_secret: 'secret_key'
				};
				
			/*	var accessTokenUrl = 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code=' + authCode +'&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&client_id=my_client_id&client_secret=secret_key';*/

				var accessTokenUrl = 'https://www.linkedin.com/uas/oauth2/accessToken';

				$.ajax({
					url: accessTokenUrl,
					type: "POST",
					beforeSend: function (xhr) {
						xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
					},
					data: postData,
					success: function (data, textStatus, jqXHR) {
						console.log(data);
						alert('success');
					},
					error: function (jqXHR, textStatus, errorThrown) {
						console.log(errorThrown);
						alert('error');
					}
				});
			}
		}

	});
});

将寻求帮助。.!!!

1 个答案:

答案 0 :(得分:3)

最后,经过如此多的搜索,我很高兴发表我的答案。 我所做的每一步都是正确的,但我在这里缺少的一件事就是Linkedin API不支持CORS。

我尝试实现Javascript SDK,该软件的工作原理类似于魅力。但是API不是。 然后,我发现非常有用的Link表示我需要通过允许CORS从后端而不是从前端实现Rest API。

确保遵循我在帖子中上面提到的所有要点。 对于Allow CORS,请点击此链接。根据领英条款data can be accessible

,您将获得数据,但仅获得用户的基本个人资料

希望这篇文章可以帮助某人时间搜索更多