我正在尝试将OAuth添加到使用Spring框架开发的rest服务中。我正在使用基于注释的配置和Spring Boot来运行它。
在我的项目中,我有以下课程:
@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecuritySettings extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("123").authorities("ROLE_USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated()
.and().httpBasic().and().csrf().disable();
}
}
我的授权服务器配置如下:
@Configuration
@EnableAuthorizationServer
public static class MyAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("web")
.authorizedGrantTypes("password")
.authorities("ROLE_CLIENT","ROLE_TRUSTED_CLIENT","ROLE_USER")
.scopes("read", "write")
.resourceIds(RESOURCE_ID);
}
}
当我向终端发出GET请求时,我被要求输入HTTP基本凭据。当我尝试使用admin
用户登录时,以下内容会被记录下来
o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: NoSuchClientException, No client with requested id: admin
输入用户名为web
工作,但我不知道它的密码。默认密码被记录,但也不起作用。
Using default security password: f23087f8-58ce-e3d-bc62-58bf0963e75c
那么这个密码是什么?我在哪里能找到它?我如何设置它?
这是OAuth访问令牌。它基于用户登录和密码,用于访问受保护的资源。URL"/oauth/Token"用于获取访问令牌,而不是可用的请求令牌。此请求在请求令牌秘密的基础上进行数字签名。
Oauth协议以以下方式使用此访问令牌:
>
用户在服务提供商的站点上被重定向,并在那里授权请求令牌。(如果通过Http basic进行授权,则应添加名为“authorization”和值为“basic EncodeBase64(“name:password”)”的请求头,其中EncodeBase64是一个函数,“name”和“password”是用户名和用户密码。
应用程序-消费者交换请求访问令牌上的令牌。
应用程序消费者向服务的API发送授权请求。
在OAuth 2开发者指南和Spring社交参考中找不到其他信息
我希望你已经得到了你问题的答案(或者更接近它)。=)
您正在使用的API来自此生成器类。
令牌终结点由客户端应用程序用于请求资源的访问令牌。它不被浏览器终端用户使用。OAuth2客户端通常被分配一个“客户端秘密”,他们可以使用该秘密在endpoint进行身份验证,通常使用OAuth 2.0规范中描述的基本身份验证。
因此,为了回答您的特定问题,您将在builder API上使用“secret”方法,并使用该值作为客户端进行身份验证:
clients.inMemory().withClient("web")
.authorizedGrantTypes("password")
.secret("webclientsecret")
...
此外,“密码”授予意味着客户端使用最终用户ID和密码请求令牌,只是为了确保这是您真正想要的。这与密码问题无关。
问题内容: 我正在使用Apache Oltu框架实现OAuth 2.0提供程序服务器,以寻找有关如何在Java中生成访问令牌和秘密令牌的想法。请指教。 问题答案: OAuth 2.0 规范并未说明如何生成令牌和秘密令牌。因此,由您决定是使用一些现有的/锚定数据来生成令牌,还是要使用随机序列来生成令牌。唯一的区别是,如果您使用大概已知的数据(例如,用户数据,例如用户名,创建日期等),则可以在需要时随
我遇到了很多文章,很多文章建议使用OAuth over API密钥。据我所知,在OAuth中,我们最终获得了访问令牌,它的有效期为很多天。例如,QuickBooks online OAuth令牌的有效期为6个月。 因此,访问令牌等同于API Key。无论谁得到它,都应该像API密钥一样保护它。OAuth调用应该通过HTTPS进行,类似于基于API Key的调用。 相对于OAuth的另一个优势是授权
尝试为Azure密钥库获取oauth2令牌,请遵循下面的教程。 https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-windows-virtual-machine
alexa skill不会将请求中的“客户端机密”发送到令牌endpoint,这会导致我的OAuth服务器中的帐户链接失败。请求正文包含:{'grant_type':'authorization_code','code':'*******','redirect_uri':'https://pitangui.amazon.com/api/skill/***“,”客户id:“******”}
我实现了生成jwt令牌的oauth。我的令牌包含用户信息,如果我将其放入jwt.io中,则信息是可见的。有没有什么方法可以加密令牌,使其不被jwt.io解密?
我尝试将运行在CloudFoundry上的现有Java应用程序迁移到KeyCloak,因此使用KeyCloak Servlet Filter。这是请求代码的第一步。但是将代码转换为令牌的第二步在“不正确redirect_uri”下失败了。这是奇怪的,因为我可以看到在两个请求KeyCloak服务器然后相同的URL作为redirect_url。 有人知道原因和解决办法吗?