rps/oauth2

此包的最新版本(dev-master)没有可用的许可证信息。

TYPO3 Flow OAuth2 认证包。

dev-master 2015-01-10 07:46 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:05:14 UTC


README

这是 Kyoki.OAuth2 包的一个分支。

这是一个 Flow 包,它提供了一个 OAuth 2 提供者,例如,您可以使用它来允许第三方客户端(例如移动客户端)访问您的 Flow 应用程序 API,而无需将用户名和密码告诉应用程序

OAuth2 参考

逐步设置

  1. 在 Flow 中安装 Kyoki.OAuth2 包

    将包复制到 Flow/Packages/Applications 内部

    cd /var/www/Flow/Packages/Applications
    git clone git://github.com/farconada/Kyoki.OAuth2.git
    cd /var/www/Flow
    ./flow doctrine:update
    
  2. 设置 Flow 配置文件 configurations/Settings.yaml
    TYPO3:
      Flow:
        security:
           enable: TRUE
           authentication:
             authenticationStrategy: atLeastOneToken
             providers:
               # your DefaultProvider
               DefaultProvider:
                 provider: PersistedUsernamePasswordProvider
                 entryPoint: 'WebRedirect'
                 entryPointOptions:
                   uri: '/login'
                 requestPatterns:
                  # a regexp pattern to disable the DefaultProvider in every Controller for every package named ApiController or TokenController
                  # It could be a better regexp of your own
                  # TokenController belongs to the Kyoki.OAuth2 package
                  # ApiController (or any other controller) is the controller securized by an OAuth access token
                   controllerObjectName: '(?!.*(Api|Token)Controller).*'
               OAuthTokenProvider:
                 provider: Kyoki\OAuth2\Security\Authentication\Provider\AccessTokenProvider
                 token: Kyoki\OAuth2\Security\Authentication\Token\AccessTokenHttpBasic
                 requestPatterns:
                   # ApiController (or any other controller) is the controller securized by an OAuth access token
                   controllerObjectName: Acme\Demoapp\Controller\ApiController
                     entryPoint: HttpBasic
                     entryPointOptions:
                       realm: 'OAuth2 Access Token Authentication'
    
  3. Kyoki.OAuth2 中已定义了 /authorize 和 /token 路由

  4. 确保您的包中的 authenticateAction 在成功登录后重定向到请求的 URL

    例如

    public function authenticateAction() {
    
                    try {
                            $this->authenticationManager->authenticate();
                    } catch (\TYPO3\Flow\Security\Exception\AuthenticationRequiredException $exception) {
                            $this->flashMessageContainer->addMessage(new \TYPO3\Flow\Error\Message('Wrong username or password.'));
                            $this->redirect('login');
                    }
                    if ($interceptedRequest = $this->securityContext->getInterceptedRequest()) {
                            $this->redirect($interceptedRequest->getControllerActionName(),
                                    $interceptedRequest->getControllerName(),
                                    $interceptedRequest->getControllerPackageKey(),
                                    $interceptedRequest->getArguments());
                    } else {
                            $this->redirect('index');
                    }
    
    }
    
  5. 创建一个控制器并使用 Policy.yaml 进行保护

    有两个角色

    • OAuth 此角色在 Kyoki.OAuth2 包中声明,允许请求令牌

    • myscope(或您想要的名称) 此角色应与 OAuthScope 标识符匹配,并需要分配给用户才能访问由 OAuth 令牌保护的应用程序资源

      resources:
        methods:
          Acme_Demoapp_Api: 'method(Acme\Demoapp\Controller\ApiController->.*Action())'
      roles:
        myscope: []
        User: [OAuth,myscope]
      acls:
        User:
          methods:
            Acme_Demoapp_Api: GRANT
        myscope:
          methods:
            Acme_Demoapp_Api: GRANT
      
  6. 创建所需的域对象:Accounts、OAuthClient 和 OAuthScope

    OAuthClient:是一个 API,它可以由用户自己拥有或由其他用户拥有,例如 API 拥有者。OAuthClient 中的 redirectUri 属性定义了必须与您查询 API 的 URL 匹配的 URL 的起始部分。关联的帐户也很重要,因为您在请求新的令牌时以该帐户的身份识别

    OAuthScope:当有人请求访问权限时,它会发送一个包含在参数中的范围,此范围必须与 Policy.yaml 中定义的角色名称匹配,并定义此范围权限

注意

  • 目录 Tests/lamp/ 中有一个 Acme.Demoapp 包
  • 您可以使用 vagrant 在一个完全安装了 OAuth 的 Flow 上部署新的 virtualbox
  • 目录 Tests/lamp/client 中有一个 OAuth 客户端/消费者的示例