我有一个OAuth Authserver应用程序,一个Web应用程序(支持OAuth SSO),一个Android应用程序(需要访问其他资源,在Web应用程序)
我想实现弹簧的oauth2采取OAuth的香草的例子(最新一个没有JWT)春天开机样品project.The项目有以下客户端配置
security.oauth2.client.clientId: acme
security.oauth2.client.clientSecret: acmesecret
security.oauth2.client.authorized-grant-types: authorization_code,refresh_token,password
security.oauth2.client.scope: openid
因此,逻辑流程是这样(纠正我,如果我错了)的用户尝试访问UI应用程序 - > zuul代理重定向(使用客户端的详细信息)向认证服务器 - >使用证书登录(保护/授权URL) - >授权作用域 - >返回与令牌/授权码。
。我如何消除用户授权步骤(对于Android应用的目的,我想资源所有者apporach)改变了我的客户端配置这样的跟随
clients.inMemory().withClient("****").secret("*****").authorities("ROLE_USER")
.authorizedGrantTypes("password", "refresh_token").scopes("read", "write");
但我从authserver应用得到错误(DefaultRedirectResolver.java)
“A REDIRECT_URI只能由隐式或authorization_code许可类型一起使用。”
如果我有我的security.oauth性能低于我的网络用户界面应用程序
security:
oauth2:
client:
accessTokenUri: http://localhost:9097/uaa/oauth/token
userAuthorizationUri: http://localhost:9097/uaa/oauth/authorize
clientId: ****
clientSecret: ****
resource:
userInfoUri: http://localhost:9097/uaa/user
对于单点登录,使用或不能够资源所有者密码的方法吗?如果是的话我应该改变,因为配置的一部分?
“A REDIRECT_URI只能由隐式或authorization_code许可类型一起使用。”
我不知道有关“REDIRECT_URI”但我不认为你可以不使用密码流获得单点登录。 SSO是通过创建授权服务器上的会话,以便客户端(相同或不同)不会有如果授权服务器已经有一个验证会话再次进行身份验证实现的。密码流不创建认证服务器上的会话......它只是变得令牌。
您必须指定.authorizedGrantTypes(authorization_code
或implicit
补助的类型),因为他们也重定向类型。
clients.inMemory().withClient("****").secret("*****").authorities("ROLE_USER")
.authorizedGrantTypes("authorization_code", "password", "refresh_token").scopes("read", "write");
要么
clients.inMemory().withClient("****").secret("*****").authorities("ROLE_USER")
.authorizedGrantTypes("implicit", "password", "refresh_token").scopes("read", "write");