小编Dan*_* B.的帖子

通过第三方REST API进行Symfony2身份验证

我正在使用Symfony2编写一个应用程序,它将与Wordnik REST API连接.

目前,Wordnik API不提供OAuth功能,因此我必须接受用户名和密码,然后我将透明地传递给API接口.

我想将此API身份验证集成到Symfony2的安全系统中,但到目前为止,我还无法确定最佳实现路由是什么.

我不认为自定义用户提供程序是正确的,因为密码不存储在我的系统中.有关自定义身份验证提供程序的所有示例似乎都与将应用程序的一部分保护 API有关,而不是针对 REST API.

我不清楚FOSUserBundle在多大程度上有助于解决这个问题.

理想的流程:

  • 用户提供凭据.
  • 凭据将传递给第三方REST API
  • 如果凭据正确:
    • 如果相应的"第三方用户"实体不存在,则由我的应用程序创建.
    • 使用此"第三方用户"实体对用户进行身份验证.

在Symfony2安全上下文中实现此功能的最佳方法是什么?

谢谢!

相关问题:

php api restful-authentication symfony

12
推荐指数
1
解决办法
4771
查看次数

(直接)尽管存在未处理的函数错误,AWS Lambda 调用响应状态代码仍为 200

我有一个 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)

ruby aws-lambda

9
推荐指数
1
解决办法
9845
查看次数

serverless-offline:API 网关的远程 Lambda 自定义授权方

我已使用 CloudFormation 语法在 API 网关资源上声明了一个 HTTP 代理方法(详细信息请参阅之前的文章。)

\n\n

我正在尝试附加一个类型为“Request”的自定义授权者,它使用现有的 AWS Lambda 函数。无服务器文档有一个使用 CloudFormation 设置自定义授权者的不错示例。同时,无服务器离线 显然支持(源)请求范围的自定义授权者。

\n\n

在创建以下无服务器模板时,我仔细交叉引用了AWS::ApiGateway::ResourceAWS::ApiGateway::Authorizer的相关 AWS CloudFormation 文档以及相关的无服务器文档。但到目前为止,我没有从无服务器离线获得预期的输出或行为获得预期的输出或行为。

\n\n

资源是在没有授权者的情况下创建的

\n\n

当我启动以下无服务器配置时,不会为我的资源加载授权者。我没有看到我的serverless.yml文件中有什么错误或缺失。你有什么建议吗?提前致谢!

\n\n
\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\n

serverless.yml

\n\n

以下模板文件包含 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

9
推荐指数
0
解决办法
2793
查看次数

JCrop:防止取消选择?

我目前正在设置图片上传裁剪序列.

该应用程序需要强制执行最小大小,但这会导致JCrop行为尴尬:

  • 单击而不拖动不会产生任何效果.
  • 单击并轻微拖动可立即选择最小高度.

一个可能的解决方案将解决上述问题:

  • 界面打开时带有默认选择.
  • 无法取消选择.

JCrop具有默认选择的内置功能,但是我还没有确定内置的配置/行为以防止取消选择.

到目前为止的尝试 -

我试过这条路

$.Jcrop.defaults.onRelease = function(e) {
     e.preventDefault();
     e.stopPropagation();
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在几个地方修改插件的源代码,以便通过return打开这些函数定义来短路(也许)执行取消选择的函数:

doneSelect Selection.release Selection.done

......没有预期的结果.

有小费吗?

jquery image-processing jcrop

8
推荐指数
2
解决办法
4593
查看次数

redux-form:输入onChange后触发Form onSubmit

我在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)

reactjs redux redux-form react-redux

8
推荐指数
1
解决办法
2379
查看次数

将 AWS Secrets Manager 密钥注入 API 网关集成

我正在维护一个 API 网关,它使用 GET 参数中的 API 密钥来证明其上游 API (HTTP) 代理集成之一的身份。(某些限制目前无法提供更强大的客户端 SSL 证书。)

目前,此 API 密钥在 HTTP 代理集成的 URL 查询字符串参数部分中作为静态值提供。

是时候轮换密钥了,我们需要一个更加集中/集成的解决方案来解决这个问题——针对客户端和后端。

将 AWS Secrets Manager 中的机密注入 API 网关集成的最直接、直接的方法是什么?

我可以想象将相关秘密从相应的授权者 lambda 加载到请求上下文中,但这似乎是错误的:不同关注点的混合。

预先感谢您的任何提示!

屏幕截图突出显示 AWS API Gateway 上 HTTP 集成请求中的 URL 查询字符串参数

amazon-web-services aws-api-gateway aws-secrets-manager

8
推荐指数
0
解决办法
1292
查看次数

Symfony2实体用户提供程序覆盖自定义身份验证提供程序

我的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)

编辑

这可能证明是有用的.这是主分支的差异......

  • 定义身份验证提供程序(WordnikProvider)仍然执行时(a473d354)
  • 主分支(ddcfeae2)上的最新提交,其中不再执行auth提供程序. …

php authentication rest restful-authentication symfony

7
推荐指数
1
解决办法
951
查看次数

如何将redux-form的onSubmit与redux-api-middleware集成?

我正在使用redux-formredux-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)

reactjs redux redux-form

6
推荐指数
1
解决办法
1882
查看次数

Zend _redirect错误:两次添加基本URL

使用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消除两次出现的应用程序目录.

有没有人有解决这个问题的建议,或任何进一步查看的提示?

redirect zend-framework

5
推荐指数
1
解决办法
2016
查看次数

URL编码参数打破了默认的Zend重写规则

我正在使用标准的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提出的解决方案,没有变化:

.htaccess mod-rewrite zend-framework url-rewriting urlencode

5
推荐指数
1
解决办法
4185
查看次数