首页 文章

单点登录的Spring Oauth2 ResourceOwnerPassword流程

提问于
浏览
3

我有一个oauth Authserver应用程序,一个Web应用程序(启用oauth sso),一个Android应用程序(需要访问Web应用程序中的其余资源)

我正在尝试使用oauth-vanilla(最新的没有jwt)spring boot示例项目来实现spring-oauth2 . 该项目具有以下客户端配置

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 app - > zuul proxied redirect(带有客户端详细信息)到身份验证服务器 - >使用凭据登录(protected / authorize url) - >授权范围 - >使用令牌/授权码返回 .

如何消除用户授权步骤(对于Android应用目的,我想要资源所有者apporach) . 我改变了我的客户端配置,如下所示

clients.inMemory().withClient("****").secret("*****").authorities("ROLE_USER")
                .authorizedGrantTypes("password", "refresh_token").scopes("read", "write");

但我从authserver应用程序收到错误( DefaultRedirectResolver.java

“redirect_uri只能由implicit或authorization_code授权类型使用 . ”

如果我在我的web-ui应用程序中有我的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

对于单点登录,是否可以使用资源所有者密码方法?如果是这样,我应该作为配置的一部分进行更改?

2 回答

  • 2

    “redirect_uri只能由implicit或authorization_code授权类型使用 . ”

    我不确定“redirect_uri”但我认为你不能用密码流单点登录 . 通过在授权服务器上创建会话来实现SSO,以便如果授权服务器已经具有经过身份验证的会话,则客户端(相同或不同)将不必再次进行身份验证 . 密码流不会在身份验证服务器上创建会话...它只会获取令牌 .

  • 0

    您必须在.authorizedGrantTypes()上指定 authorization_codeimplicit grant类型,因为它们也是 redirect types .

    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");
    

    资料来源:DefautlRedirectResolver

相关问题