我已经读到谷歌停止了之前的身份验证方法来访问谷歌API,所以现在我们必须使用OAuth2身份验证方法。我已经读到,我们必须去开发人员控制台获取ClientID和客户机机密,这样我们才能执行身份验证。但我在编写成功登录所需的更改代码方面遇到了很大的困难。
我正在寻找在登录级别进行更改的指导方针。我试图应用我在网上找到的一些代码,但我没有成功。关于开发者控制台,我已经有了一个带有客户端ID和秘密的项目,所以我没有生成一个新的,而是使用已经生成的客户端ID和秘密。
这是谷歌变更前的工作代码:
{
/// <summary>
/// Summary description for GoogleAnalytics
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class GoogleAnalytics : System.Web.Services.WebService
{
[WebMethod]
public string GetAnalyticsPageViews()
{
string returnValue = string.Empty;
object cacheObjPageViewsCount = CacheService.Get(CacheService.ANALYTICSPAGEVIEWS);
if (cacheObjPageViewsCount != null)
returnValue = cacheObjPageViewsCount as string;
else
{
try
{
string userName = Configurations.GetConfigurationValueAsString("GoogleAnalyticsUsername");
string passWord = Configurations.GetConfigurationValueAsString("GoogleAnalyticsPassword");
string profileId = Configurations.GetConfigurationValueAsString("GoogleAnalyticsProfileId");
const string dataFeedUrl = "https://www.googleapis.com/analytics/v2.4/data";
AnalyticsService service = new AnalyticsService("ApplicationName");
if (!string.IsNullOrEmpty(userName))
{
service.setUserCredentials(userName, passWord);
}
DataQuery query1 = new DataQuery(dataFeedUrl);
query1.Ids = "ga:" + profileId;
query1.Metrics = "ga:visits";
query1.Sort = "ga:visits";
query1.GAStartDate = DateTime.Now.AddYears(-1).ToString("yyyy-MM-dd");
query1.GAEndDate = DateTime.Now.ToString("yyyy-MM-dd");
query1.StartIndex = 1;
DataFeed dataFeedVisits = service.Query(query1);
DataEntry dataEntry = (DataEntry)dataFeedVisits.Entries[0];
returnValue = dataEntry.Metrics[0].Value;
}
catch (Exception exc)
{
LogService.LogException(exc);
returnValue = string.Empty;
}
CacheService.Add(CacheService.PP_ANALYTICSPAGEVIEWS_COUNT_CACHE_KEY, returnValue);
}
return returnValue;
}
}
}
这是我试图完成的改变
而不是使用if“service.setUserCredentials(用户名、密码)我使用“GoogleOAutho2.authenticate();”这样做的结果是,它会打开一个新页面,出现以下错误:请求中的重定向URI:http://localhost:60279/authorize/与注册的重定向URI不匹配。
我不明白为什么我要发送到一个新页面,以前的身份验证方法没有发生这种情况,我错过了什么?
提前谢谢你,N
我被发送到的页面:
https://accounts.google.com/o/oauth2/auth?access_type=offline
(此代码基于此示例)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.Apis.Analytics.v3;
using Google.Apis.Auth.OAuth2;
using System.Threading;
using Google.Apis.Util.Store;
using Google.Apis.Services;
using System.Security.Cryptography.X509Certificates;
using System.IO;
namespace GoogleOAuth2 {
class GoogleOAutho2
{
static string[] scopes = new string[] {
AnalyticsService.Scope.Analytics, // view and manage your Google Analytics data
AnalyticsService.Scope.AnalyticsEdit, // Edit and manage Google Analytics Account
AnalyticsService.Scope.AnalyticsManageUsers, // Edit and manage Google Analytics Users
AnalyticsService.Scope.AnalyticsReadonly}; // View Google Analytics Data
static String CLIENT_ID = "CLIENTID"; // found in Developer console
static String CLIENT_SECRET = "SECRET";// found in Developer console
// here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData%
public static bool authenticate()
{
try
{
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = CLIENT_ID, ClientSecret = CLIENT_SECRET }, scopes, Environment.UserName, CancellationToken.None, new FileDataStore("XXX.GoogleAnalytics.Auth.Store")).Result;
return true;
}
catch (Exception exeption)
{
string error = exeption.Message;
return false;
}
}
}
}
不确定这是否有帮助。我没有使用这些相同的类,甚至没有C#。我使用的方法是直接超文本传输协议调用。在我的实现中,我调用https://accounts.google.com/o/oauth2/auth作为redirect_uri参数传递API控制台中指定的相同值(见屏幕截图)。
本文向大家介绍如何实现跨域访问?相关面试题,主要包含被问及如何实现跨域访问?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: JSONP:通过动态创建script,再请求一个带参网址实现跨域通信。document.domain + iframe跨域:两个页面都通过js强制设置document.domain为基础主域,就实现了同域。 JSONP:ajax请求受同源策略影响,不允许进行跨域请求,
laravel的一个问题,我简化了一下是这样。 我想让访问接口 /a,未登录状态访问返回 0, 登录状态下返回 1,如何实现? 正常是这样。topic 状态为 1 时可以任何人访问,状态未 2 时,只有作者可以访问。 上边这种情况,无论登录与否,$user 都是 null。 如果 route 加上 middleware('auth'), 那么未登录状态又无法访问。
问题内容: java中如何实现访问控制,public, protected, default和private关键字有何区别? 问题答案:
本文向大家介绍Nginx 禁止IP访问如何实现,包括了Nginx 禁止IP访问如何实现的使用技巧和注意事项,需要的朋友参考一下 Nginx 禁止IP访问 我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效最关键的一点是,在serv
OAuth2ClientOptions credentials=new OAuth2ClientOptions().setClientId(clientId).setClientSecret(clientSecret).setFlow(Oauth2FlowType.client).setTokenPath(“oauth/token URL”); 错误:访问令牌错误;io/vertx/ext/jwt
当客户端请求资源服务器使用OAuth2.0访问令牌获取受保护的资源时,该服务器如何验证该令牌?OAuth 2.0刷新令牌协议?