我正在使用Symfony2编写一个应用程序,它将与Wordnik REST API连接.
目前,Wordnik API不提供OAuth功能,因此我必须接受用户名和密码,然后我将透明地传递给API接口.
我想将此API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳实现路由是什么.
我不认为自定义用户提供程序是正确的,因为密码不存储在我的系统中.有关自定义身份验证提供程序的所有示例似乎都与将应用程序的一部分保护为 API有关,而不是针对 REST API.
我不清楚FOSUserBundle在多大程度上有助于解决这个问题.
理想的流程:
在Symfony2安全上下文中实现此功能的最佳方法是什么?
谢谢!
相关问题:
我有一个 AWS Lambda,专为从我团队服务环境中的多个应用程序直接调用而设计。我正在编写一个包装类,它将执行此调用,并在 Lambda 响应中执行相关验证和错误检测/处理。
根据设计,如果调用参数的运行时验证失败,Lambda 将终止并出现未处理的异常。但没想到发现尽管出现了未处理的函数错误,status_code
调用响应的还是200:
[1] pry(main)> lambda_client = Aws::Lambda::Client.new(region: 'us-east-1')
=> #<Aws::Lambda::Client>
[2] pry(main)> invocation_response = lambda_client.invoke(function_name: 'jwt-tokens-dev-AccessTokenCreator')
=> #<struct Aws::Lambda::Types::InvocationResponse
status_code=200,
function_error="Unhandled",
log_result=nil,
payload=#<StringIO:0x007f91c1749028>,
executed_version="$LATEST">
[3] pry(main)> invocation_response.payload.string
=> "{\"errorMessage\": \"Required parameters are missing: role, sub, sub_type\", \"errorType\": \"ParamMissingError\", \"stackTrace\": [[\"/var/task/handler.py\", 15, \"access_token_creator\", \"return access_token_creator_handler(event, context)\"], [\"/var/task/access_token_creator.py\", 32, \"handler\", \"params = _validate_event_params(event)\"], [\"/var/task/access_token_creator.py\", 97, \"_validate_event_params\", \"raise ParamMissingError('Required parameters are missing: %s' % ', '.join(missing_params))\"]]}"
[4] pry(main)> ActiveSupport::JSON.decode(invocation_response.payload.string)
=> {"errorMessage"=>"Required parameters are missing: role, …
Run Code Online (Sandbox Code Playgroud) 我已使用 CloudFormation 语法在 API 网关资源上声明了一个 HTTP 代理方法(详细信息请参阅之前的文章。)
\n\n我正在尝试附加一个类型为“Request”的自定义授权者,它使用现有的 AWS Lambda 函数。无服务器文档有一个使用 CloudFormation 设置自定义授权者的不错示例。同时,无服务器离线 显然支持(源)请求范围的自定义授权者。
\n\n在创建以下无服务器模板时,我仔细交叉引用了AWS::ApiGateway::Resource和AWS::ApiGateway::Authorizer的相关 AWS CloudFormation 文档以及相关的无服务器文档。但到目前为止,我没有从无服务器离线获得预期的输出或行为获得预期的输出或行为。
\n\n当我启动以下无服务器配置时,不会为我的资源加载授权者。我没有看到我的serverless.yml
文件中有什么错误或缺失。你有什么建议吗?提前致谢!
\xe2\x9e\x9c serverless-offline-attempt git:(master) \xe2\x9c\x97 npm start\n\n> @ start /Users/freen/src/apig/serverless-offline-attempt\n> ./node_modules/serverless/bin/serverless offline\n\nServerless: Starting Offline: dev/us-east-1.\n\nServerless: Routes defined in resources:\nServerless: ANY /upstream/{proxy*} -> http://upstream.company.cool/{proxy}\n\nServerless: Offline listening on http://localhost:3000\n
Run Code Online (Sandbox Code Playgroud)\n\nserverless.yml
以下模板文件包含 APIG 资源和授权者配置。
\n\n\xe2\x9e\x9c serverless-offline-attempt git:(master) \xe2\x9c\x97 npm start\n\n> @ start …
Run Code Online (Sandbox Code Playgroud) aws-lambda aws-api-gateway serverless-framework serverless serverless-offline
我目前正在设置图片上传裁剪序列.
该应用程序需要强制执行最小大小,但这会导致JCrop行为尴尬:
一个可能的解决方案将解决上述问题:
JCrop具有默认选择的内置功能,但是我还没有确定内置的配置/行为以防止取消选择.
到目前为止的尝试 -
我试过这条路
$.Jcrop.defaults.onRelease = function(e) {
e.preventDefault();
e.stopPropagation();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试在几个地方修改插件的源代码,以便通过return
打开这些函数定义来短路(也许)执行取消选择的函数:
doneSelect
Selection.release
Selection.done
......没有预期的结果.
有小费吗?
我在redux-form中有一组简单的单选按钮.我需要单选按钮组的onChange事件来触发onSubmit
表单事件.
我正在使用redux-form v5.3.1
RadioFormContainer.js
class RadioFormContainer extends Component {
render() {
const {submit} = this.props;
return (
<RadioForm submit={submit} />
)
}
}
const mapDispatchToProps = (dispatch) => {
return {
submit: function(values, dispatch) {
// API call after validation
}
}
};
Run Code Online (Sandbox Code Playgroud)
RadioForm.js
class RadioForm extends Component {
render() {
const {
submit, // custom post-validation handler
// via redux form decorator:
handleSubmit,
submitting
} = this.props;
return (
<form onSubmit={handleSubmit(submit)}>
<input {...radioField}
checked={radioField.value == "one"} …
Run Code Online (Sandbox Code Playgroud) 我正在维护一个 API 网关,它使用 GET 参数中的 API 密钥来证明其上游 API (HTTP) 代理集成之一的身份。(某些限制目前无法提供更强大的客户端 SSL 证书。)
目前,此 API 密钥在 HTTP 代理集成的 URL 查询字符串参数部分中作为静态值提供。
是时候轮换密钥了,我们需要一个更加集中/集成的解决方案来解决这个问题——针对客户端和后端。
将 AWS Secrets Manager 中的机密注入 API 网关集成的最直接、直接的方法是什么?
我可以想象将相关秘密从相应的授权者 lambda 加载到请求上下文中,但这似乎是错误的:不同关注点的混合。
预先感谢您的任何提示!
我的Symfony2自定义身份验证提供程序现在似乎正在运行.
用户提供商
我几乎使用了FOSUserBundle,但我甚至没有为我的用户提供电子邮件地址,而且我不需要增加的功能或复杂功能.
所以我只是使用实体提供程序.
我将我的编码器设置为纯文本,因为API客户端库为我处理这个问题,但是,另一个障碍:似乎用户现在正在针对这些用户记录进行身份验证.
在我实现实体用户提供程序之前,我的登录表单给了我有效的响应:正确的凭据没有产生错误,错误的凭据导致我的自定义"不正确的用户/通过错误".
现在,即使我提供了我知道正确的凭据,我得到的只是错误消息"Bad credentials" ,好像我正在实现UserAuthenticationProvider,但据我所知,我不是.我的自定义提供程序直接实现AuthenticationProviderInterface.
所以目前我认为我错误地实现了实体用户提供程序,这样它就会以某种方式覆盖我的自定义身份验证提供程序.同时配置实体用户提供程序和自定义身份验证提供程序的正确方法是什么?
档
security.yml的相关部分
encoders:
WordRot\PlayBundle\Entity\User: plaintext
providers:
wordnik_users:
entity: { class: WordRotPlayBundle:User, property: username }
firewalls:
wordnik_secured:
pattern: ^/play
logout: ~
anonymous: ~
# The next line specifies the custom authentication provider:
wordnik: true
form_login:
provider: wordnik_users
login_path: /login
check_path: /play_check
# on success
always_use_default_target_path: true
default_target_path: /play
Run Code Online (Sandbox Code Playgroud)
编辑
这可能证明是有用的.这是主分支的差异......
我正在使用redux-form和redux-api-middleware编写React/Redux应用程序,而我在将redux-form的onSubmit
功能与RSAA生命周期集成时遇到了麻烦.
redux-form文档说onSubmit
处理程序应该 返回一个Promise.直到resolve
被要求承诺,形式的submitting
支柱将是true
.
但是,在这个应用程序中,我的API调用目前不使用promises(例如via fetch
).我通过调度[CALL_API]
RSAA操作并减少redux-api-middleware的响应操作来进行API调用.
class MyReduxFormContainer extends Component {
render() {
return (
<MyReduxForm submit={this.props.submit} />
)
}
}
const mapDispatchToProps = (dispatch) => {
return {
submit: function(values, dispatch) {
dispatch({
[CALL_API]: {
method: 'PATCH',
types: [
{
type: 'REQUEST',
endpoint: '...',
body: JSON.stringify(values)
},
'SUCCESS',
'FAILURE'
]
}
});
// Problem: redux-api-middleware-style API calls …
Run Code Online (Sandbox Code Playgroud) 我使用Zend控制器_redirect
方法遇到了不规则的行为.
我的应用程序副本是通过我的符号链接产生的DocumentRoot
.我的默认路由器也是自定义的,以响应这种模式:
http://localhost/<appSymLink>/<param_A>/<controller>/<action>/
从控制器,我构建一个这样的URL:
$url = $this->_helper->url('action', 'controller', $param_A = 'valueA');
如果我访问网址:
http://localhost/<appSymLink>/<param_A>/<controller>/<action>/
该变量包含以下字符串:
/<appSymLink>/<param_A>/<controller>/<action>/
当我打电话的时候
$this->_redirect($url);
用户显式重定向到此路径,具有冗余基本路径.
/<appSymLink>/<appSymLink>/<param_A>/<controller>/<action>/
Zend似乎在两次基础路径之前.
我的同事的应用程序副本存在于他的中DocumentRoot
,他没有遇到这个问题.
在操作之前定义一个空的基本路径,就在操作之前,其工作原理如下:
$this->getRequest()->setBaseUrl('');
这显然不是一个可行的解决方案.另一方面,在控制器插件中执行此操作可以routeShutdown
消除两次出现的应用程序目录.
有没有人有解决这个问题的建议,或任何进一步查看的提示?
我正在使用标准的Zend /public/.htaccess
文件(如下所示).
目前我正在尝试将用户转发到特定的控制器/操作,并提供on-success-redirect URL作为URL参数.
生成的URL(通过Zend的URL视图助手组装和编码)如下所示:
localhost/crop/index/successRedirect/localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
但是这种模式显然违反了默认的Zend包mod_rewrite规则:访问URL会产生标准的Apache 404错误; Zend没有收到请求.
当手动重新形成最终参数时,请求按预期工作:
localhost/crop/index/?successRedirect=localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
然而,这需要一个hackish,两步URL生成过程.如果视图助手生成的URL独立工作,那将是理想的选择.
可以做些什么来允许url-encoding通过?任何见解将不胜感激!
这些是我的.htaccess的内容
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
像这样启用RewriteLog不会为失败的模式生成输出:
RewriteLogLevel 9
RewriteLog "<path>/rewrite.log"
Run Code Online (Sandbox Code Playgroud)
我尝试了以下两个Q&A提出的解决方案,没有变化:
AllowEncodedSlashes On
)QSA
指令重写规则).htaccess mod-rewrite zend-framework url-rewriting urlencode
aws-lambda ×2
php ×2
reactjs ×2
redux ×2
redux-form ×2
symfony ×2
.htaccess ×1
api ×1
jcrop ×1
jquery ×1
mod-rewrite ×1
react-redux ×1
redirect ×1
rest ×1
ruby ×1
serverless ×1
urlencode ×1