我计划手动实施Oauth2授权代码授予流程(使用PKCE)。我的问题部分与this有关。我正在使用Java,Springboot。
我想用Oauth保护我的后端API。这些api由本机应用程序调用。大多数用于授权代码授予的Oauth实现都需要用户交互。我想知道是否有可能避免这种情况。由于我的应用程序在本机应用程序上运行,因此我不希望将用户重定向到浏览器进行身份验证。我的应用程序具有注册/登录功能。
我正计划实现一个过滤器,其中的逻辑看起来类似于此
if(uri contains authorize){
get all details from request
generate a uuid and store details in db with ttl
return uuid as code.
}
else if(uri contains token){
get all details from request
extract code from request and check for validity in database.
if(code valid) {
generate a JWT with access_token with ttl and refresh_token
return JWT
}
}
else{
check if JWT is present and valid
if valid proceed
}
我还将有一个刷新令牌的逻辑。我想知道
答案 0 :(得分:2)
首先
那是您最糟糕的事情之一。安全性很复杂,通常需要多个团队来实施。这就是为什么我们有标准库的原因。 使用Spring Security。
回答您的问题:
安全漏洞无处不在。安全性远不只是您发布的一小段代码。 oauth2是一个标准,其中包含有关验证和检查内容以及验证方式的确切规则。所以我的快速回答是,您未遵循标准。是的,这是不安全的。使用spring安全性。
不,当您说用户交互时,我不知道您在说什么。您需要遵循定义的流程,并且如果您选择是否自动执行流程,则取决于您。描述您实际上想要做什么。
ClientIds或与此相关的任何事物在任何应用程序中都永远不安全。这完全取决于您要寻找的安全级别。如果我们在谈论企业安全性,那么通常会将所有机密存储在后端中,并为您的前端应用程序实现某种BFF,以保存所有客户端机密并执行交换。唯一存储在客户端中的是不同类型的安全cookie。
因此,如果您选择实际的本机应用程序进行交换,或者某种代理服务由您决定。但是不,对于任何客户来说,绝没有秘密是安全的。