【问题标题】:How to use openid connect with flutter on spring security如何在 Spring Security 上使用 openid 与颤振连接
【发布时间】:2020-01-14 09:50:02
【问题描述】:

我创建了一个由 spring-security-keycloak-adapter 保护的 Spring Boot 服务。由于该服务已经知道(keycloak)身份提供者,因此我认为将 issuerUrl 和 clientId 发送到移动客户端以直接登录到 keycloak 没有任何意义。相反,我只想在客户端的 web 视图中调用服务的 loginurl。据我了解,spring 应该重定向到 keycloak 并最终返回令牌。 不幸的是,所有颤振包都需要 clientId 和 issuerUrl 用于 oauth 过程

我已经尝试过 openid_client 的颤振包

正如您在官方存储库中的以下代码示例中所见,它需要 clientId 和 issuerUrl

// import the io version
import 'package:openid_client/openid_client_io.dart';

authenticate(Uri uri, String clientId, List<String> scopes) async {   

    // create the client
    var issuer = await Issuer.discover(uri);
    var client = new Client(issuer, clientId);

    // create an authenticator
    var authenticator = new Authenticator(client,
        scopes: scopes,
        port: 4000);

    // starts the authentication
    var c = await authenticator.authorize(); // this will open a browser

    // return the user info
    return await c.getUserInfo();
}

【问题讨论】:

  • 您的问题是什么?我问是因为听起来你已经有了如何使用颤振的答案——颤振确实需要 issuerUri 和 clientId 才能工作。
  • 但是为什么需要这两个信息。当我在浏览器中打开受保护的 url 时,它已经将我正确重定向到身份提供者。所以没有其他选择可以向客户提供这些信息并直接联系身份提供者?
  • 我已根据您的说明添加了答案。我还建议您更改帖子标题中的问题,以帮助其他有相同问题的 Flutter 用户。

标签: spring flutter spring-security dart openid-connect


【解决方案1】:

全面披露:Flutter不是我写的,但我确实为Spring Security写了一些相关的客户端代码。

为什么是 issuerUri? 原因很可能是 OIDC Discovery。您可以使用颁发者来推断其他授权服务器端点。这为您减少了配置:您不需要指定令牌端点、授权端点等等。如果你只提供发行人,那么 Flutter 会计算出其余的。

请注意,对于 Spring Security,这只是多个配置选项中的一个,但无论哪种方式都需要指定一些内容,以便应用程序知道去哪里。 Flutter 我不能说,但它支持更多的配置模式可能只是时间问题。

为什么选择 clientId? 这是一项安全措施,the specification 要求这样做。如果有人在调用我的 API,我想知道它是谁。此外,授权服务器将使用此client_id 来执行诸如确保/authorize 请求中的redirect_uri 与为client_id 配置的内容相匹配的操作。

【讨论】:

  • 那么,既然身份提供者应该在服务器组件上是可配置的,那么除了基本上将所有登录相关信息(issuerUrl 和 clientId)发送给客户端之外,没有别的办法了吗?
  • 不确定我是否理解这个问题。客户端(请求授权的应用程序)应该将这两个值作为其初始配置的一部分。在什么情况下将这些值发送给客户端?例如,redirect_uri 是客户端发送给授权服务器的东西,而不是相反。可能是我误解了你的要求。
猜你喜欢
  • 2012-08-04
  • 2021-08-16
  • 1970-01-01
  • 2017-12-16
  • 2018-09-04
  • 1970-01-01
  • 2014-02-09
  • 2020-04-03
  • 2011-01-11
相关资源
最近更新 更多