我一直在关注Oauth .Net Google Apis,以便通过OAuth进行身份验证并使用Google驱动Apis.
具体来说,我想使用我已经存储的刷新令牌,以便使用它来实例化GoogleDrive服务.
我找到了像https://code.google.com/p/google-api-dotnet-client/source/browse/Tasks.SimpleOAuth2/Program.cs?repo=samples这样的示例
这似乎使用"GoogleWebAuthorizationBroker.AuthorizeAsync",但我不确定如何使用刷新令牌而不是客户端的秘密,你似乎在这个例子中提供它.
我已经构建了一个可执行文件,该可执行文件会启动一个对话框,该对话框中嵌入了IE Web浏览器的active-x控件(C ++)。
我希望此控件允许跨站点脚本编写。网页上的一帧加载本地html,另一帧从服务器加载。然后,我希望服务器页面调用驻留在本地html文件中的javascript函数。
我试图通过使控件实现它自己的“ IInternetSecurityManager”接口来实现这一目标,在该接口中我提供了自己的ProcessUrlAction和GetSecurityId方法。
根据我的阅读,我需要做的是使GetSecurityId返回所有URL的相同域。我的自定义实现被调用,但是无论我做什么,当服务器html尝试访问本地html文件上的脚本时,都会收到“权限被拒绝”错误。以下是我的实现。有人看错吗?
#define SECURITY_DOMAIN "http:www.mysite.com"
STDMETHOD (GetSecurityId)(
LPCWSTR pwszUrl,
BYTE *pbSecurityId,
DWORD *pcbSecurityId,
DWORD_PTR dwReserved)
{
if (*pcbSecurityId >=512)
{
memset(pbSecurityId,0,*pcbSecurityId);
strcpy((char*)pbSecurityId,SECURITY_DOMAIN);
pbSecurityId[strlen(SECURITY_DOMAIN)] = 3;
pbSecurityId[strlen(SECURITY_DOMAIN)+1] = 0;
pbSecurityId[strlen(SECURITY_DOMAIN)+2] = 0;
pbSecurityId[strlen(SECURITY_DOMAIN)+3] = 0;
*pcbSecurityId = (DWORD)strlen(SECURITY_DOMAIN)+4;
return S_OK;
}
return INET_E_DEFAULT_ACTION;
}
STDMETHOD(ProcessUrlAction)(
/* [in] */ LPCWSTR pwszUrl,
/* [in] */ DWORD dwAction,
/* [size_is][out] */ BYTE __RPC_FAR *pPolicy,
/* [in] */ DWORD cbPolicy,
/* [in] */ BYTE __RPC_FAR *pContext,
/* [in] */ DWORD …Run Code Online (Sandbox Code Playgroud) 我正在使用 .net api for v2 使用代码流场景。我的印象是,这是您用来获取刷新令牌的方法,您可以在用户授权您的应用程序一次后保存并重新使用以获取新的访问令牌。
在进行如下调用后,我浏览了调用提供的 uri。
var redirect = DropboxOAuth2Helper.GetAuthorizeUri(OauthResponseType.Code, AppKey, RedirectUri, user.ConnectState);
Run Code Online (Sandbox Code Playgroud)
我解析代码参数的结果,然后将其提供给 ProcessCodeFlowAsync()。这只适用于获取访问令牌一次。如果我保存并再次尝试使用它,我会收到“代码已被使用:无效授权”错误。
我以为我得到的是刷新令牌,但反复提供它 ProcessCodeFlowAsync 不起作用。如何获得刷新令牌,我可以重复使用它来获取访问令牌,而不必每次都让用户授权。顺便说一下,我正在缓存和重新使用身份验证令牌而不是访问令牌。
所以我想使用SetThreadLocale将线程代码页设置为UTF8.到目前为止,我一直在使用atl字符串转换宏的第二个参数,如"CT2A(szBUF,CP_UTF8)"来执行此操作.但是我希望能够在SetThreadLocale()的开头设置一次线程代码页,而不必再次使用转换宏的第二个参数.
我该怎么做呢?SetThreadLocale不会采用像CP_UTF8这样的代码页参数,只是一个LCID.我应该为SetThreadLocale提供什么参数才能实现这个目的?
请记住,我没有特定的语言.我得到的字符串可能是日语,韩语,英语等.到目前为止,当指定CP_UTF8作为转换宏的第二个参数时,我对这种字符串组合没有任何问题.您可能会问"那么为什么不继续使用第二个参数".回答,"因为工作在代码上的团队成员很容易忘记它.如果使用转换宏的默认1参数版本正常工作将会很好."
有没有人知道是否有办法使用单个XMLHTTPRequest对象发送多个异步请求.我可以使用单个请求执行此操作,并从我的onreadystatechange()处理程序获取响应.
我想知道是否有办法使用同一个对象发送多个并行请求,但我没有看到任何方法来匹配来自onreadystatechange()函数的请求的响应.
我正在尝试使用 c# 中的 .NET CSOM 在线获取 Sharepoint 上文件的父列表。当我从一个独立的 c# 应用程序测试它时,下面的代码工作正常。
但是当我通过 C++ 中的 com 互操作调用完全相同的方法时,使用相同的参数,我得到一个异常,“指定的对象不属于列表”。在 ExecuteQuery() 之后抛出异常
但我知道它确实如此,如果我在独立的 c# 中使用完全相同的 URL“/sites/develop_apps/Shared Documents/subway/heynow(000640-9-9-2016 9-53-31 AM).PDF”调用该方法应用程序,我也不例外。“GetFileByServerRelativeUrl”似乎工作正常。无论如何它不会抛出异常。
我读过有关类似错误的文章,它们似乎可能与网址有关。但我不明白为什么相同的参数在一种情况下有效,而在另一种情况下无效。
Microsoft.SharePoint.Client.File thisFile =m_clientContext.Web.GetFileByServerRelativeUrl(fileRelativeUrl);
ListItem item = thisFile.ListItemAllFields;
m_clientContext.Load(item.ParentList);
m_clientContext.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)
错误显示的提琴手跟踪。
{ "SchemaVersion":"15.0.0.0","LibraryVersion":"16.0.5701.1202","ErrorInfo":{ "ErrorMessage":"指定的对象不属于列表。","ErrorValue":null," TraceCorrelationId":"c616a29d-90ab-3000-b1de-17538058f3e4","ErrorCode":-2146232832,"ErrorTypeName":"Microsoft.SharePoint.SPException" },"TraceCorrelationId":"c6190a5b39d0
c++ ×3
atl ×1
c# ×1
csom ×1
dropbox-api ×1
google-oauth ×1
msxml ×1
security ×1
utf-8 ×1
xss ×1