1. 首页 > 快讯

打造高效认证系统的简单指南: OAuth 2.0 身份服务器 ID Server轻松配置

大家好,今天给各位分享打造高效认证系统的简单指南: OAuth 2.0 身份服务器 ID Server轻松配置的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

尽管Id Server通过控制台可视化解决了创建OAuth2客户端的问题,但OAuth2客户端的配置参数有很多。不过,如何进一步降低OAuth2的使用难度,将创建好的OAuth2客户端转换为配置已经成为一种必然,从技术角度来说实现起来并不感觉困难。我们先来看看最终的效果。点击配置生成按钮,直接生成Spring Security的客户端yaml配置:

这种效果是如何实现的呢?

highlightjs

主要依赖highlightjs这个代码高亮库。通常,我们在各大技术社区看到的许多丰富多彩的代码块都依赖于这个JS 库。就连我自己的技术博客felord.cn 也使用了这个类库。美化代码片段。使用起来很简单:

文档类型html

html 语言'en'

元字符集'UTF-8'

标题标题标题

链接rel'样式表'

href'https://felord.cn/css/gruvbox-dark.min.css'

脚本src'//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min.js'脚本

scripthljs.initHighlightingOnLoad();脚本

身体

代码类'yaml'

弹簧:

应用程序:

name:id服务器

代码

身体

HTML引入了style和highlight.js库,然后添加了初始化脚本。然后只需将缩进的代码写入.注意,code标签必须添加相应语言或脚本的类。这是效果:

实现

至此思路就很清晰了。只需将参数项的值设为动态即可。希望能达到这个效果:

代码类'yaml'

弹簧:

应用程序:

name:${appName}

代码

但事实上,我大意了。我使用了百里香模板。我没有找到让thymeleaf将配置项固化到页面中的方法,所以这个缩进的格式需要后端生成然后按照thymeleaf的要求渲染,所以我写了一个很复杂的方法:

@GetMapping('/system/client/yaml/{id}')

公共字符串yaml(模型模型,@PathVariable字符串id){

OAuth2Client oauth2ClientclientRepository.findClientById(id);

字符串clientNameoauth2Client.getClientName();

字符串clientIdoauth2Client.getClientId();

SetRedirectUriredirectUrisoauth2Client.getRedirectUris();

字符串urisredirectUris.stream()

.map(RedirectUri:getRedirectUri)

.collect(Collectors.joining(','));

SetOAuth2GrantTypeauthorizationGrantTypesoauth2Client.getAuthorizationGrantTypes();

字符串类型authorizationGrantTypes.stream()

.map(OAuth2GrantType:getGrantTypeName)

.collect(Collectors.joining(','));

字符串methodoauth2Client.getClientAuthenticationMethods().stream()

.map(ClientAuthMethod:getClientAuthenticationMethod)

.collect(Collectors.joining(','));

字符串范围Stream.concat(

oauth2Client.getScopes().stream()

.map(OAuth2Scope:getScope),Stream.of(OidcScopes.OPENID))

.collect(Collectors.joining(','));

LinkedHashMapString,Objectclientnew LinkedHashMap();

LinkedHashMapString,ObjectclientRegistrationnew LinkedHashMap();

clientRegistration.put('client-id',clientId);

clientRegistration.put('client-secret','请填写您的OAuth2客户端密码');

clientRegistration.put('redirect-uri','请从'+uris+'中指定一个);

clientRegistration.put('authorization-grant-type','请指定'+types+'中的一种);

clientRegistration.put('客户端身份验证方法',method);

clientRegistration.put('范围',范围);

client.put('注册',

Collections.singletonMap(clientName,clientRegistration));

client.put('provider',Collections.singletonMap(clientName,

Collections.singletonMap('issuer-uri','http://localhost:9000')));

映射字符串,对象弹簧

Collections.singletonMap('spring',

Collections.singletonMap('安全',

Collections.singletonMap('oauth2',

Collections.singletonMap('客户端',客户端))));

DumperOptions dumperOptionsnew DumperOptions();

dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

Yaml yamlnew Yaml(dumperOptions);

字符串dumpyaml.dump(spring);

model.addAttribute('yaml',dump);

return '/system/client/yaml';

}效果自然是有的,但是很不理想。

无法生成评论,断行失控,尤其是9张地图让我抓狂。

优化

我是不是觉得问题太复杂了?所以最后我做了这样的yaml格式模板:

字符串yml'spring:\n'+

'security:\n'+

'oauth2:\n'+

' client:\n'+

'注册:\n'+

' # 这是可以更改的客户端名称\n'+

' '+客户端名称+':\n'+

' client-id: '+clientId+'\n'+

' # 密码为注册客户端时使用的密码\n'+

' client-secret: 请填写您记住的OAuth2 客户端密码\n'+

' # 只能选择一个\n'+

'redirect-uri: 请从'+uris+' 中指定一个\n'+

' # 只能选择一个\n'+

'authorization-grant-type:'+types+'选择三个之一\n'+

' 客户端身份验证-method: '+方法+'\n'+

'scope:'+范围+'\n'+

'provider:\n'+

' '+客户端名称+':\n'+

' # 确保授权服务器地址可以被客户端访问\n'+

'发行者-uri: http://localhost:9000';

model.addAttribute('yaml',yml);当然这是为了兼容Java 8,如果换成Java 17就可以直接使用字符串模板了。我什至可以在这里写评论。最终效果是这样的:

效果比之前的计划好很多。当然,也许你有更好的方案,让我们一起集思广益。

关于Id Server

仓库地址:https://github.com/NotFound403/id-server 欢迎star。

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

南宫沐风

这篇文章太棒了!我一直想了解一下如何快速搭建 OAuth 授权服务器,看到这个“一键生成配置”就兴奋不已。

    有5位网友表示赞同!

你tm的滚

听起来很方便,希望文章能详细讲解一下 Id Server 的作用和使用方法。

    有9位网友表示赞同!

陌潇潇

我已经用过一些第三方 OAuth 服务,不知道这个 Id Server 能满足我的需求吗?

    有7位网友表示赞同!

予之欢颜

搭建授权服务器听起来有点复杂,一键生成配置简直太赞了!

    有8位网友表示赞同!

情深至命

最近在研究开源的 Oauth2 解决方案,这篇文章刚好能补充我的知识点。

    有6位网友表示赞同!

人心叵测i

不知道这个 Id Server 是否支持多类型的应用?比如移动端、Web 应用等?

    有20位网友表示赞同!

冷风谷离殇

我比较想了解一下 OAuth 的安全性问题,文章中会提到吗?

    有15位网友表示赞同!

妄灸

搭建完服务器后,还需要配置相应的客户端才能使用吗?

    有10位网友表示赞同!

花海

对于新手来说,这篇文章会有详细的步骤指导吗?

    有9位网友表示赞同!

纯真ブ已不复存在

看了标题,我对 Id Server 一键生成配置的功能非常感兴趣!希望文章能提供代码示例。

    有16位网友表示赞同!

非想

OAuth 授权机制真是太重要了,保护用户数据安全。很高兴看到有人在研究这个领域。

    有9位网友表示赞同!

如梦初醒

我之前尝试过搭建 OAuth 服务器,过程比较复杂,希望能从这篇文章学到一些新的经验。

    有9位网友表示赞同!

秘密

想了解一下不同 Id Server 的优缺点,文章中会比较吗?

    有11位网友表示赞同!

嗯咯

如果想要自定义授权流程,Id Server 是否支持定制化配置?

    有6位网友表示赞同!

箜篌引

搭建完服务器后,如何进行监控和维护呢?这篇文章里有相关内容吗?

    有15位网友表示赞同!

容纳我ii

这个 Id Server 主要用来自动化哪些场景?方便理解一下它应用的范围。

    有15位网友表示赞同!

孤城暮雨

我还在寻找合适的 OAuth 解决方案,可以参考一下你分享的文章吗?

    有11位网友表示赞同!

巷陌繁花丶

如果在搭建过程中遇到问题,文章中会提供什么支持方式呢?

    有8位网友表示赞同!

相知相惜

希望这篇文章能帮我快速上手 Id Server,省去一部分学习成本。

    有11位网友表示赞同!

惦着脚尖摘太阳

OAuth 越来越重要了,期待看到更多关于其发展的文章!

    有17位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7280.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666