NelmioApiDocBundle中的Oauth2授权

时间:2018-03-27 17:17:41

标签: symfony symfony-3.4 nelmioapidocbundle

我正在尝试将NelmioApiDocBundle用于Symfony 3.4项目API文档,同时还试图将OAuth 2授权用于开始项目API访问。

到目前为止,我已经关注了如何让FOSOAuthServerBundle正常工作的this tutorial。到目前为止,我可以 1.)使用命令行命令创建客户端:

php bin / console fos:oauth-server:create-client --redirect-uri =" ___" --grant型=" authorization_code" --grant型="密码" --grant型=" refresh_token" --grant型="令牌" --grant型=" client_credentials"

2。)我也可以通过访问我服务器上的这个网址手动获取访问令牌

http://127.0.0.1:8000/oauth/v2/token?client_id=______&client_secret=________&grant_type=client_credentials

3.。)我可以使用令牌通过在GET参数中包含令牌来访问需要OAuth访问的Symfony项目区域

但是,在NelmioApiDocBundle授权中,我无法完成此工作。这是一个截图:

NelmioApiDocBundle Authorization page

如果输入我的client_id和密钥,它会按照预期将我带到登录页面。我可以输入我的登录信息,并按预期将我带到Approve或Deny Page。此时,如果我单击“批准”或“拒绝”,则会尝试使用" redirect_uri" http://localhost:3200/oauth2-redirect.html。无论我做什么,我都无法更改重定向URI。

如何获得正确的重定向URI?

1 个答案:

答案 0 :(得分:1)

好的,这实际上很容易修复。您需要添加一行:

oauth2RedirectUrl: 'URLhere',

位于web / bundles / nelmioapidoc /

中的文件init-swagger-ui.js(Symfony 3.4)

最终文件最终看起来像这样:

window.onload = () => {
  const data = JSON.parse(document.getElementById('swagger-data').innerText);
  const ui = SwaggerUIBundle({
      oauth2RedirectUrl: 'URLhere',
    spec: data.spec,
    dom_id: '#swagger-ui',
    validatorUrl: null,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: 'StandaloneLayout'
  });

  window.ui = ui;
};

此外,您可能希望从Swagger项目中下载文件oauth2-redirect.html以包含实际重定向。