我想在Go应用程序上设置一个带有令牌的身份验证系统,它使用AngularJS前端.
我正在寻找的是关于创建安全系统的所有步骤的建议.这是我的步骤:
我们将考虑用户条目已写入我们的数据库.
用户转到Web应用程序的索引,提示他登录.
使用我的app.yaml文件,我声明我的HTML文件具有AngularJS前端的依赖项:
application: authtest
version: 1
runtime: go
api_version: go1
handlers:
- url: /
static_files: frontend/index.html
upload: frontend/(.*\.html)
- url: /js
static_dir: frontend/js
- url: /.*
script: _go_app
Run Code Online (Sandbox Code Playgroud)
视觉:

码:
<form ng-submit="signIn()" ng-controller="signInCtrl">
<input type="email" ng-model="credentials.email" placeholder="Email" name="email">
<input type="password" ng-model="credentials.password" placeholder="Password" name="password">
<input type="submit" value="Sign in">
</form>
Run Code Online (Sandbox Code Playgroud)
用户输入其凭据,然后单击" 登录"按钮.
AngularJS模块代码:
<script>
angular.module('authtest', ['ngCookies'])
.controller('signInCtrl', ['$scope', '$http', '$window', '$cookieStore', '$route', function($scope, $http, …Run Code Online (Sandbox Code Playgroud) 我想下载一些上传到我的 S3 服务器上的文件。
目前,我所有的存储桶和其中的文件都是公开的,所以我可以下载我想要的。不幸的是,我无法使用空格或“&”等特殊字符访问文件...
我尝试通过 HTML 代码更改 URL 中的特殊字符:
http://s3-eu-west-1.amazonaws.com/custom.bucket/mods/b&b.jar
Run Code Online (Sandbox Code Playgroud)
经过
http://s3-eu-west-1.amazonaws.com/custom.bucket/mods/b%26b.jar
Run Code Online (Sandbox Code Playgroud)
但我总是有同样的错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3E987FCE07075166</RequestId>
<HostId>
O2EIujdbiAeYg44rsezQlargfT7qVSL8SpqbTxkd/1UwxQrwZ3SJ+R3NlHyGF7rI
</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
任何人都可以解决这个问题?
我无法重命名它们,因为它们已被其他应用程序使用。
url amazon-s3 special-characters access-denied amazon-web-services
我使用此代码在Javascript中保存图像:
window.location.href = grid.toDataURL("image/png").replace("image/png", "image/octet-stream");
Run Code Online (Sandbox Code Playgroud)
代码有效,但保存的文件没有任何扩展名,我必须手动重命名.
我的问题是如何将扩展放在最后?
谢谢.
我想在我的应用程序中添加一个使用MEAN堆栈的CSRF保护.
我尝试了某人已经给出的答案:ExpressJS中的CSRF保护
但这是旧的快递版本,所以我做了一些改变:
app.use(cookieParser(config.cookieSecret, { httpOnly: true }));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({ secret: config.sessionSecret, resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(csrf({value: function(req) {
var token = (req.body && req.body._csrf)
|| (req.query && req.query._csrf)
|| (req.headers['x-csrf-token'])
|| (req.headers['x-xsrf-token']);
return token;
}
}));
app.use(function(req, res, next) {
res.cookie('XSRF-TOKEN', req.csrfToken());
next();
});
Run Code Online (Sandbox Code Playgroud)
我可以看到XSRF-TOKEN我的应用程序(使用Chrome检查)生成了很好的生成名称.
但是当我发布一个表单(Angular frontend)时,我有一个关于令牌的错误:
{"message":"invalid csrf token","error":{"expose":true,"code":"EBADCSRFTOKEN","statusCode":403,"status":403}}
我错过了什么 ?我想知道是否req.csrfToken()生成Angular给出的好令牌......
编辑:
我只是看到XSRF-TOKENAngularJS 仅在$http请求中使用.所以我想我必须在我的表单中添加一个隐藏的输入来发布csrf值,由Express检查,但是如何?