我想在javascript中从谷歌获取日历信息.我读过"如何"手册.他们没有帮助.即使这种"有用的"复制代码(授权)也没有.有人会这么好教我如何使用谷歌API?也许某人有一些样本要分享
这个美丽的js代码:
<html>
<button id="authorize-button" onclick='handleAuthClick()'>Authorize</button>
<script type="text/javascript">
var clientId = '***';
var apiKey = '***';
var scopes = 'https://www.googleapis.com/auth/plus.me';
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth,1);
}
function checkAuth() {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
}
function handleAuthResult(authResult) {
var authorizeButton = document.getElementById('authorize-button');
if (authResult && !authResult.error) {
authorizeButton.style.visibility = 'hidden';
makeApiCall();
} else {
authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event) {
// Step 3: get authorization to use private data
gapi.auth.authorize({client_id: clientId, scope: scopes, …Run Code Online (Sandbox Code Playgroud) 我已经看到了一些类似的问题似乎并没有解决我的确切用例,我认为我已经找到了答案,但在安全性,RSA和几乎相当的时候,我总是一个菜鸟与之相关的一切.我对这些概念基本熟悉,但到目前为止我所做的所有实际实现都是关于编辑其他人的代码而不是生成我自己的代码.无论如何,我在这里:
我知道Javascript本身就是加密的好地方.有人可能会对你的回应进行调整并破坏JS,因此你最终会通过网络发送未加密的数据.它应该通过HTTPS SSL/TLS连接来完成,但是这种托管需要花钱,所以官方签名的证书应该是真实的连接.
话虽这么说,我认为我要这样做的方式绕过了JS加密的中间人的弱点,因为我只为一个RESTful加密一件事(一个密码哈希)服务调用,然后仅使用该密码哈希来签署来自客户端的请求,以便将它们作为来自请求声明的用户的身份验证.这意味着JS只负责在创建用户帐户时加密密码哈希,如果服务器无法解码该密码,那么它就知道它已经存在.
我还将保存一些客户信息,特别是$_SERVER['REMOTE_ADDR']为了保证某人没有MitM注册交换本身.
我正在使用PHP的openssl_pkey_函数生成非对称密钥,以及客户端的Cryptico库.我的计划是让用户向REST服务发送"预注册"请求,这将导致服务器生成密钥,将私钥和客户端信息存储在由电子邮件地址索引的数据库中,然后响应用公钥.
然后,客户端将使用公钥加密用户的密码哈希,并将其作为另一种请求类型发送到REST服务以完成注册.服务器将解密并保存密码哈希,使客户端信息和私钥无效,因此不能使用该信息进行进一步的注册,然后使用200状态代码进行响应.
要登录,用户可以输入他们的电子邮件地址和密码,密码将在注册期间进行哈希处理,附加到请求正文,然后再次进行哈希处理,以便向登录端点签署请求,该端点会尝试将存储的哈希附加到请求体并对其进行哈希处理,以根据请求中的签名验证签名,从而对用户进行身份验证.对服务的进一步数据请求将遵循相同的认证过程.
我错过了任何明显的漏洞吗?有可能将$_SERVER['REMOTE_ADDR']价值欺骗到具体的东西吗?我不需要IP地址准确或与用户登录时相同,我只需要知道"预先注册"并获得公钥的同一台机器跟进并完成注册而不是劫机者使用窥探公钥完成注册.当然,我想如果他们能够做到这一点,他们就会在创建时劫持帐户而不是恢复,合法用户将无法使用自己的密码完成注册,这也是可以的.
最重要的是,除非我派出真正的SSL主机,否则有人仍然会破解我的服务吗?我是否将Javascript的弱点作为加密工具?
当我编写和调试我的代码时,如果有人想使用它,我会在这里发布.如果我要离开我的网站进行任何攻击,请告诉我.
这些函数用于验证客户端请求以对头文件中的哈希,生成私钥,将其保存到数据库,使用公钥进行响应,以及解密和检查密码哈希.
public function validate($requestBody = '',$signature = '',$url = '',$timestamp = '') {
if (is_array($requestBody)) {
if (empty($requestBody['signature'])) { return false; }
if (empty($requestBody['timestamp'])) { return false; }
if ($requestBody['requestBody'] === null) { return false; }
$signature = $requestBody['signature'];
$timestamp = $requestBody['timestamp'];
$requestBody = $requestBody['requestBody'];
}
if (($requestBody === null) || empty($signature) || empty($timestamp)) { return false; } …Run Code Online (Sandbox Code Playgroud) 这个问题已经占据了最后一天左右.
我一直试图让我的AngularJS应用程序懒洋洋地加载每个州的组件的脚本文件.我正在开发一个在Angular上工作的大型项目,该index.html文件已经演变成100多个<script>标签,包括各种控制器,服务和库的JS.它们中的大多数都很小,所以加载时间并不是一个巨大的问题(虽然它可能是),但它对我来说从未像现在这样干净.
也许是因为我已经习惯了PHP的自动加载器,或者刚刚被所有可以在编译时加载自己的依赖项的语言所破坏.在应用程序的根文档中为一些次要的边缘状态指令加载脚本,或者对于指令实际所属的模块,如果它被移动到没有<script>荣耀列表的另一个应用程序中,则不加载脚本本身.
无论哪种方式,我正在开始一个新项目,并希望保持清洁,但以这种方式将组件加载到Angular中会带来许多挑战.其中很多已经在文档或某些博客文章,SO问题或其他方面得到了解决,但我还没有看到端到端的解决方案与其他Angular组件完全集成.
ng-app如果在呈现页面时已加载Angular和模块,则Angular仅引导指令.即使使用延迟加载启动应用程序也需要一种解决方法.我已经看到了#1和#2的答案.显然,angular.bootstrap可以在没有ng-app指令的情况下加载整个页面后用于启动模块.引导后添加组件是有点不太明显,但保存到不同的引用$provider在配置块服务的伎俩,覆盖moduleAPI更加无缝如此.解决#3并以满足#4的方式完成所有这一切都有点难以理解.
解决#2的上述例子用于控制器和指令.添加服务变得有点复杂,异步,延迟加载,并且意味着将数据提供给延迟加载的控制器,尤其如此.关于Isitor先生,他的代码当然适用于将控制器注册为概念证明,但是代码的编写方式不容易扩展到那些对脚本有意义的延迟加载的应用程序,更大的应用程序,具有数十到数百个包含,依赖项和异步服务.
我将发布我提出的解决方案,但如果有人提出改进建议或者已经找到了一种极其不同的,更好的方法,请随意添加它.