Symfony2 oauth2 服务器
Symfony2 oauth2 server
我想为我的网站创建一个 oauth2 服务器(3 个网站,1 个登录)。我创建了服务器,我使用了 FOSUserBundle 和 FOSOAuthServerBundle,我遵循了说明。
但是我有 1 个问题。我可以通过 /oauth/v2/token 创建令牌,这很好。
我可以转到 /oauth/v2/oauth,但是当我被重定向到该网站时,我有 examle.com?error=invalid_request&error_description=Invalid+response+type.
如果我在 /login 登录,我将登录,但不会创建令牌。如果我只有 1 个网站,这会很好,但我想做一些更像 Google 的东西(如果你在地图、youtube 上...如果你想登录,你将被重定向到 accounts.google.com、登录,然后返回网站),但我现在不知道该怎么做。我想我需要做更多的工作,但具体在哪里?
我现在的security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
anonymous: true
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: false # can be omitted as its default value
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }
我应该创建一个新的登录页面还是用户提供商?谢谢:)
您没有指定回复类型。您应该使用此请求:
PROVIDER_HOST/oauth/v2/auth?client_id=CLIENT_ID&response_type=code&redirect_uri=CLIENT_HOST
然后使用代码获取访问权限:
CLIENT_HOST/?code=Yjk2MWU5YjVhODBiN2I0ZDRkYmQ1OGM0NGY4MmUyOGM2NDQ2MmY2ZDg2YjUxYjRiMzAwZTY2MDQxZmUzODg2YQ
然后索要代币:
PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fclinet.local%2F&code=CODE
更多信息在这里:http://blog.tankist.de/blog/2013/07/18/oauth2-explained-part-3-using-oauth2-with-your-bare-hands/
我想为我的网站创建一个 oauth2 服务器(3 个网站,1 个登录)。我创建了服务器,我使用了 FOSUserBundle 和 FOSOAuthServerBundle,我遵循了说明。
但是我有 1 个问题。我可以通过 /oauth/v2/token 创建令牌,这很好。 我可以转到 /oauth/v2/oauth,但是当我被重定向到该网站时,我有 examle.com?error=invalid_request&error_description=Invalid+response+type.
如果我在 /login 登录,我将登录,但不会创建令牌。如果我只有 1 个网站,这会很好,但我想做一些更像 Google 的东西(如果你在地图、youtube 上...如果你想登录,你将被重定向到 accounts.google.com、登录,然后返回网站),但我现在不知道该怎么做。我想我需要做更多的工作,但具体在哪里?
我现在的security.yml:
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
anonymous: true
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: false # can be omitted as its default value
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }
我应该创建一个新的登录页面还是用户提供商?谢谢:)
您没有指定回复类型。您应该使用此请求:
PROVIDER_HOST/oauth/v2/auth?client_id=CLIENT_ID&response_type=code&redirect_uri=CLIENT_HOST
然后使用代码获取访问权限:
CLIENT_HOST/?code=Yjk2MWU5YjVhODBiN2I0ZDRkYmQ1OGM0NGY4MmUyOGM2NDQ2MmY2ZDg2YjUxYjRiMzAwZTY2MDQxZmUzODg2YQ
然后索要代币:
PROVIDER_HOST/oauth/v2/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fclinet.local%2F&code=CODE
更多信息在这里:http://blog.tankist.de/blog/2013/07/18/oauth2-explained-part-3-using-oauth2-with-your-bare-hands/