﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-KEYCLOAK</title><link>http://www.blogjava.net/paulwong/category/55364.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 21 Apr 2022 21:40:01 GMT</lastBuildDate><pubDate>Thu, 21 Apr 2022 21:40:01 GMT</pubDate><ttl>60</ttl><item><title>KEYCLOAK授权模式与实施</title><link>http://www.blogjava.net/paulwong/archive/2022/04/21/450723.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 21 Apr 2022 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/04/21/450723.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/450723.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/04/21/450723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/450723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/450723.html</trackback:ping><description><![CDATA[<br /><a href="https://stackoverflow.com/questions/42186537/resources-scopes-permissions-and-policies-in-keycloak" target="_blank">https://stackoverflow.com/questions/42186537/resources-scopes-permissions-and-policies-in-keycloak</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/450723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-04-21 15:32 <a href="http://www.blogjava.net/paulwong/archive/2022/04/21/450723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KEYCLOA+DMariaDB 在LINUX上的安装</title><link>http://www.blogjava.net/paulwong/archive/2022/04/14/450717.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 14 Apr 2022 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/04/14/450717.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/450717.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/04/14/450717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/450717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/450717.html</trackback:ping><description><![CDATA[下载KEYCLOAK与安装，可参见：<br /><a href="https://www.janua.fr/how-to-install-keycloak-with-mariadb/" target="_blank">https://www.janua.fr/how-to-install-keycloak-with-mariadb/</a><br /><br />启动时配置不通过localhost访问控制台：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#!&nbsp;/bin/bash<br /><br />BIN_PATH=$(cd&nbsp;`dirname&nbsp;$0`<span style="color: #008000; ">;</span><span style="color: #008000; ">&nbsp;pwd)</span><span style="color: #008000; "><br /></span>IP=10.10.27.69<br />KEYCLOAK_OPT="-b&nbsp;${IP}&nbsp;-Djboss.bind.address.management=${IP}&nbsp;-Dkeycloak.profile.feature.upload_scripts=enabled"<br />KEYCLOAK_OPT="${KEYCLOAK_OPT}&nbsp;-Djboss.socket.binding.port-offset=100&nbsp;-Dkeycloak.frontendUrl=http://${IP}:81/auth&nbsp;"<br />#-Dkeycloak.hostname=${IP}&nbsp;-Dkeycloak.httpPort=81&nbsp;-Dkeycloak.httpsPort=82<br /><br />nohup&nbsp;${BIN_PATH}/bin/standalone.sh&nbsp;${KEYCLOAK_OPT}&nbsp;&gt;&nbsp;/dev/null&nbsp;&amp;</div><br />更改KEYCLOAK的DATASOURCE时，可直接更改默认的而无需重新配置：<br /><a href="https://medium.com/@pratik.dandavate/setting-up-keycloak-standalone-with-mysql-database-7ebb614cc229" target="_blank">https://medium.com/@pratik.dandavate/setting-up-keycloak-standalone-with-mysql-database-7ebb614cc229</a><br /><br />KEYCLOAK的JBOSS管理界面地址改为非LOCALHOST：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->-Djboss.bind.address.management=${IP}</div><br />如果是由NGINX过来的访问，这样前端的地址是和默认的不一样，需配置前端URL：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->-Dkeycloak.frontendUrl=http://${IP}:81/auth</div><br />更改JVM大小standalone.conf：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#<br />#&nbsp;Specify&nbsp;options&nbsp;to&nbsp;pass&nbsp;to&nbsp;the&nbsp;Java&nbsp;VM.<br />#<br /><br />JBOSS_JAVA_SIZING="-server&nbsp;-Xms3G&nbsp;-Xmx3G&nbsp;-Xmn512m&nbsp;-XX:MetaspaceSize=96M&nbsp;-XX:MaxMetaspaceSize=256m"</div><br />REFERENCE:<br /><a href="https://www.keycloak.org/docs/latest/server_installation/index.html#_hostname" target="_blank">https://www.keycloak.org/docs/latest/server_installation/index.html#_hostname</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/450717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-04-14 15:15 <a href="http://www.blogjava.net/paulwong/archive/2022/04/14/450717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Easily Secure your  Microservices with Keycloak</title><link>http://www.blogjava.net/paulwong/archive/2022/01/03/438645.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 03 Jan 2022 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/01/03/438645.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/438645.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/01/03/438645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/438645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/438645.html</trackback:ping><description><![CDATA[<a href="https://www.doag.org/formes/pubfiles/11143470/2019-NN-Sebastien_Blanc-Easily_Secure_your_Microservices_with_Keycloak-Praesentation.pdf">https://www.doag.org/formes/pubfiles/11143470/2019-NN-Sebastien_Blanc-Easily_Secure_your_Microservices_with_Keycloak-Praesentation.pdf</a><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/438645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-01-03 10:03 <a href="http://www.blogjava.net/paulwong/archive/2022/01/03/438645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OIDC - KEYCLOAK - 自定义CLIENT SCOPE</title><link>http://www.blogjava.net/paulwong/archive/2021/12/22/436242.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 22 Dec 2021 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/12/22/436242.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/436242.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/12/22/436242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/436242.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/436242.html</trackback:ping><description><![CDATA[当CLIENT或用户在KEYCLOAK中成功登录后，会返回JWT字符串，其中默认含有权限的信息，但此信息以内嵌的方式呈现，非常不方便。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000; ">"</span><span style="color: #800000; ">resource_access</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">app-springboot-confidential</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">user</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">test-employee-service</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_EMPLOYEE</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">service-springboot</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_PRODUCTS</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">account</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">manage-account</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">manage-account-links</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">test-department-service</span><span style="color: #800000; ">"</span>:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_DEPARTMENT</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}</div><br /><ul><li>需要将权限的信息输出到一个KEY中，这时可以新增自定义CLIENT SCOPE。Mapper中新增KEYCLOAK已内置的【realm roles/client roles】，定义输出到JTW的字段名：my-roles。</li><li>授权哪些CLIENT可以读取此CLIENT SCOPE.</li><li>在登录参数scope中，加入此值：my-roles，这样在输出的JWT就会以平面的方式输出所有roles</li></ul><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000; ">"</span><span style="color: #800000; ">my-roles</span><span style="color: #800000; ">"</span>:&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">user</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_EMPLOYEE</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_PRODUCTS</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">manage-account</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">manage-account-links</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">READ_DEPARTMENT</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">offline_access</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">user</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;]</div><br /><ul><li>SPRING SECURITY中取出权限信息：<br /><br /></li></ul><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@Bean<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ReactiveJwtAuthenticationConverter&nbsp;jwtAuthenticationConverter(ObjectMapper&nbsp;objectMapper)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JwtGrantedAuthoritiesConverter&nbsp;jwtGrantedAuthoritiesConverter&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JwtGrantedAuthoritiesConverter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jwtGrantedAuthoritiesConverter.setAuthorityPrefix("ROLE_");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jwtGrantedAuthoritiesConverter.setAuthoritiesClaimName("my-roles");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeycloakRealmRoleConverter&nbsp;keycloakRealmRoleConverter&nbsp;=&nbsp;new&nbsp;KeycloakRealmRoleConverter(objectMapper);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReactiveJwtGrantedAuthoritiesConverterAdapter&nbsp;reactiveJwtGrantedAuthoritiesConverterAdapter&nbsp;=&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ReactiveJwtGrantedAuthoritiesConverterAdapter(<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;KeycloakRealmRoleConverter(objectMapper);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jwtGrantedAuthoritiesConverter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReactiveJwtAuthenticationConverter&nbsp;jwtConverter&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ReactiveJwtAuthenticationConverter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jwtConverter.setJwtGrantedAuthoritiesConverter(reactiveJwtGrantedAuthoritiesConverterAdapter);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;jwtConverter;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><ul><li>判断是否有权限</li></ul><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ServerHttpSecurity<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.authorizeExchange(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;-&gt;&nbsp;a.pathMatchers("/",&nbsp;"/error").permitAll()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.pathMatchers(HttpMethod.GET,&nbsp;"/protected/**").hasRole("READ_DEPARTMENT")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.anyExchange()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.authenticated()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</div><img src ="http://www.blogjava.net/paulwong/aggbug/436242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-12-22 11:15 <a href="http://www.blogjava.net/paulwong/archive/2021/12/22/436242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用REST API与KEYCLOAK进行OUATH2协议的登录认证</title><link>http://www.blogjava.net/paulwong/archive/2021/10/12/436009.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 12 Oct 2021 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/10/12/436009.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/436009.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/10/12/436009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/436009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/436009.html</trackback:ping><description><![CDATA[KEYCLOAK是一套用户、WEB API登录管理，授权管理的WEB应用。<br />如果要访问受KEYCLOAK保护的REST API服务，则需要夹带一个ACCESS_TOKEN。<br /><br />前端页面：<br /><ul><li>前端页面一般是给用户使用的，则需要用户输入在KEYCLOAK中有效的用户名和密码，并提供CALL BAK的URL，提交给KEYCLOAK<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/auth?client_id=app-springboot-confidential<span style="color: #FF0000; ">&amp;redirect_uri</span>=http://10.80.27.69:8183/<span style="color: #FF0000; ">&amp;response_type</span>=code<span style="color: #FF0000; ">&amp;scope</span>=openid</div></li><li>如果KEYCLOAK验证通过，则通知页面重导向回调的URL，并附上code=xxx，此code则是AUTHORIZATION_CODE<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http://10.80.27.69:8183/?session_state=2ad9ab98-6c39-43a8-872f-2112c27b74df<span style="color: #FF0000; ">&amp;code</span>=3f48ce19-58f9-45d9-8c09-30d492bf4b24.2ad9ab98-6c39-43a8-872f-2112c27b74df.bd7526ef-b1bf-447f-baef-b7dfd6f0df93</div></li><li>回调的URL对应的SERVELET，取得AUTHORIZATION_CODE，并加上client_id和client_secrect，调用KEYLOAK的取ACCESS_TOKEN的HTTP API，取得ACCESS_TOKEN，返回给页面<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token<br />client_id=app-springboot-confidential<span style="color: #FF0000; ">&amp;client_secret</span>=3acf7692-49cb-4c45-9943-6f3dba512dae<span style="color: #FF0000; ">&amp;redirect_uri</span>=http://10.80.27.69:8183/<span style="color: #FF0000; ">&amp;grant_type</span>=authorization_code<span style="color: #FF0000; ">&amp;code</span>=cc7ac566-90f9-404e-b88e-fa28037b07d1.591311e1-5380-46a2-9363-834f17337922.bd7526ef-b1bf-447f-baef-b7dfd6f0df93</div></li><li>页面保存此ACCESS_TOKEN，就可以调用后台的各种API获取数据<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->{<br />&nbsp;&nbsp;&nbsp;&nbsp;"access_token":&nbsp;"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJGSjg2R2NGM2pUYk5MT2NvNE52WmtVQ0lVbWZZQ3FvcXRPUWVNZmJoTmxFIn0.eyJleHAiOjE2MzQwMjA4ODksImlhdCI6MTYzNDAyMDU4OSwianRpIjoiNDAwOTQ4ZmQtMGU0MS00YWRjLTlhY2MtMzczZWM2NDVhNzM5IiwiaXNzIjoiaHR0cDovLzEwLjgwLjI3LjY5OjgxODAvYXV0aC9yZWFsbXMvcXVpY2tzdGFydCIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiJkZGVkMDA2YS0xY2QxLTRjODUtOTQ1MS0wMjFlZmY3OTFiMmUiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJhcHAtc3ByaW5nYm9vdC1jb25maWRlbnRpYWwiLCJzZXNzaW9uX3N0YXRlIjoiYzRlN2QzYTgtMDg2My00OTAwLTkxZmEtMGExYmFmYmRlNGU3IiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYXBwLXNwcmluZ2Jvb3QtY29uZmlkZW50aWFsIjp7InJvbGVzIjpbInVtYV9wcm90ZWN0aW9uIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudElkIjoiYXBwLXNwcmluZ2Jvb3QtY29uZmlkZW50aWFsIiwiY2xpZW50SG9zdCI6IjEwLjEwLjIwLjU3IiwidXNlcl9uYW1lIjoic2VydmljZS1hY2NvdW50LWFwcC1zcHJpbmdib290LWNvbmZpZGVudGlhbCIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1hcHAtc3ByaW5nYm9vdC1jb25maWRlbnRpYWwiLCJjbGllbnRBZGRyZXNzIjoiMTAuMTAuMjAuNTcifQ.Ut6aZ6E1d4Esz0gRv2ubxdvrxmGvZLHHZepD5pnGxlqb_yZ4Q82TdGTG0iL4JJn2NH3QAU501dhzzuv6-OT9BUBKP-4ufyKv2DxSvt3GgdN30au5JsATHFyOWuuZGRBd3iWcynf9u3OJnSkHEnrIwRYatgndLzy8dy3AeqF12CI",<br />&nbsp;&nbsp;&nbsp;&nbsp;"expires_in":&nbsp;300,<br />&nbsp;&nbsp;&nbsp;&nbsp;"refresh_expires_in":&nbsp;600,<br />&nbsp;&nbsp;&nbsp;&nbsp;"refresh_token":&nbsp;"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI2MTlhMmJjOS0yMWIwLTRmNGMtODI4OC1kNTJmMjA3OWEzY2EifQ.eyJleHAiOjE2MzQwMjExODksImlhdCI6MTYzNDAyMDU4OSwianRpIjoiYTM0NTQ1MTYtMzc3NC00YmRlLTgzOTMtN2QyMTdkZjdkZmJkIiwiaXNzIjoiaHR0cDovLzEwLjgwLjI3LjY5OjgxODAvYXV0aC9yZWFsbXMvcXVpY2tzdGFydCIsImF1ZCI6Imh0dHA6Ly8xMC44MC4yNy42OTo4MTgwL2F1dGgvcmVhbG1zL3F1aWNrc3RhcnQiLCJzdWIiOiJkZGVkMDA2YS0xY2QxLTRjODUtOTQ1MS0wMjFlZmY3OTFiMmUiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoiYXBwLXNwcmluZ2Jvb3QtY29uZmlkZW50aWFsIiwic2Vzc2lvbl9zdGF0ZSI6ImM0ZTdkM2E4LTA4NjMtNDkwMC05MWZhLTBhMWJhZmJkZTRlNyIsInNjb3BlIjoicHJvZmlsZSBlbWFpbCJ9.QhjkJBGz5UvwBF7xHM7_V_yjfF0lrA_EWzAVdFf-BRI",<br />&nbsp;&nbsp;&nbsp;&nbsp;"token_type":&nbsp;"bearer",<br />&nbsp;&nbsp;&nbsp;&nbsp;"not-before-policy":&nbsp;0,<br />&nbsp;&nbsp;&nbsp;&nbsp;"session_state":&nbsp;"c4e7d3a8-0863-4900-91fa-0a1bafbde4e7",<br />&nbsp;&nbsp;&nbsp;&nbsp;"scope":&nbsp;"profile&nbsp;email"<br />}</div></li><li>这就是authorization_code流程</li></ul><br />后端服务：<br /><ul><li>如果是在一个API中要请求另外一个API的数据，不存在具体用户的情况</li><li>需提供如下参数：client_id、client_secrect和grant_type，且grant_type=client_credentials，调用KEYLOAK的取ACCESS_TOKEN的HTTP API，取得ACCESS_TOKEN<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http:<span style="color: #008000; ">//</span><span style="color: #008000; ">10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token</span><span style="color: #008000; "><br /></span>client_id=app-springboot-confidential&amp;client_secret=3acf7692-49cb-4c45-9943-6f3dba512dae&amp;grant_type=client_credentials</div></li><li>再将此ACCESS_TOKEN以Bearer TOKEN的方式调用别的的API</li><li>这就是client_credentials流程</li></ul><br />验证Access Token和获取Token元信息：<br /><ul><li><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http:<span style="color: #008000; ">//</span><span style="color: #008000; ">10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token/introspect</span><span style="color: #008000; "><br /></span>client_id=app-springboot-confidential&amp;client_secret=3acf7692-49cb-4c45-9943-6f3dba512dae</div></li><li>Access Token无效时返回：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->{<br />&nbsp;&nbsp;&nbsp;&nbsp;"active":&nbsp;<span style="color: #0000FF; ">false</span><br />}</div></li></ul><br />刷新Token：<br /><ul><li><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->http:<span style="color: #008000; ">//</span><span style="color: #008000; ">10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token</span><span style="color: #008000; "><br /></span>client_id=app-springboot-confidential&amp;client_secret=3acf7692-49cb-4c45-9943-6f3dba512dae&amp;grant_type=refresh_token&amp;refresh_token=asdfasd</div></li><li>返回<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->{<br />&nbsp;&nbsp;&nbsp;&nbsp;"access_token":&nbsp;"eyJhbGciOiJSUzI1NiIsIn",<br />&nbsp;&nbsp;&nbsp;&nbsp;"expires_in":&nbsp;300,<br />&nbsp;&nbsp;&nbsp;&nbsp;"refresh_expires_in":&nbsp;1800,<br />&nbsp;&nbsp;&nbsp;&nbsp;"refresh_token":&nbsp;"eyJhbGciOiJIUzI1NiIsInR5cCIgOi",<br />&nbsp;&nbsp;&nbsp;&nbsp;"token_type":&nbsp;"Bearer",<br />&nbsp;&nbsp;&nbsp;&nbsp;"not-before-policy":&nbsp;1610728470,<br />&nbsp;&nbsp;&nbsp;&nbsp;"session_state":&nbsp;"c1273eb5-f922-420c-b23a-854be9735c1d",<br />&nbsp;&nbsp;&nbsp;&nbsp;"scope":&nbsp;"profile&nbsp;email"<br />}</div></li></ul><br /><br /><br />Reference:<br /><a href="https://blog.csdn.net/nklinsirui/article/details/112706006" target="_blank">https://blog.csdn.net/nklinsirui/article/details/112706006</a><br /><br /><a href="https://www.baeldung.com/?s=keycloak" target="_blank">https://www.baeldung.com/?s=keycloak</a><br /><br /><a href="https://www.doag.org/formes/pubfiles/11143470/2019-NN-Sebastien_Blanc-Easily_Secure_your_Microservices_with_Keycloak-Praesentation.pdf" target="_blank">https://www.doag.org/formes/pubfiles/11143470/2019-NN-Sebastien_Blanc-Easily_Secure_your_Microservices_with_Keycloak-Praesentation.pdf</a><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/436009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-10-12 14:40 <a href="http://www.blogjava.net/paulwong/archive/2021/10/12/436009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Spring Cloud的快速开发脚手架&amp;最佳实践总结</title><link>http://www.blogjava.net/paulwong/archive/2020/10/09/435685.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 09 Oct 2020 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/10/09/435685.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435685.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/10/09/435685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435685.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; border-spacing: 0px; margin-top: 0px; margin-bottom: 16px; display: block; width: 942px; overflow: auto; word-break: initial; color: #40485b; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Liberation Sans&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Hiragino Sans GB&quot;, &quot;Wenquanyi Micro Hei&quot;, &quot;WenQuanYi Zen Hei&quot;, &quot;ST Heiti&quot;, SimHei, SimSun, &quot;WenQuanYi Zen Hei Sharp&quot;, sans-serif; font-size: 16px; background-color: #ffffff;">
     <tbody style="box-sizing: border-box;">
         <tr style="box-sizing: border-box; border-top: 1px solid #c6cbd1;">
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">Spring Cloud</td>
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">你懂的</td>
         </tr>
         <tr style="box-sizing: border-box; background-color: #f6f8fa; border-top: 1px solid #c6cbd1;">
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">Keycloak</td>
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">微服务认证授权</td>
         </tr>
         <tr style="box-sizing: border-box; border-top: 1px solid #c6cbd1;">
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">Jenkins</td>
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">持续集成</td>
         </tr>
         <tr style="box-sizing: border-box; background-color: #f6f8fa; border-top: 1px solid #c6cbd1;">
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">SonarQube</td>
             <td style="box-sizing: border-box; padding: 6px 13px; border-style: solid; border-color: #dfe2e5;">代码质量控制</td>
         </tr>
     </tbody>
</table><br /><br /><a href="https://gitee.com/itmuch/spring-cloud-yes" target="_blank">https://gitee.com/itmuch/spring-cloud-yes</a><img src ="http://www.blogjava.net/paulwong/aggbug/435685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-10-09 10:48 <a href="http://www.blogjava.net/paulwong/archive/2020/10/09/435685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Keycloak初探</title><link>http://www.blogjava.net/paulwong/archive/2020/10/08/435683.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 08 Oct 2020 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/10/08/435683.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435683.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/10/08/435683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435683.html</trackback:ping><description><![CDATA[Keycloak是Jboss出品的做认证和授权的WEB程序，根据OPENIDC协议，OPENID是做认证，OAUTH2.0是做授权，OPENIDC则将这两者整合。<br /><br />有提供一套WEB界面维护用户、应用与角色。<br /><br />Ream则可认为是多租户，每个租户的应用和用户数据是隔离的。<br /><br /><div>http://10.80.27.69:8180/auth/realms/quickstart/.well-known/openid-configuration&nbsp;提供当前所有的API节点。<br /></div><div>get_access_token_from_public_client:</div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->curl&nbsp;--location&nbsp;--request&nbsp;POST&nbsp;'http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token'&nbsp;\<br />--header&nbsp;'Content-Type:&nbsp;application/x-www-form-urlencoded'&nbsp;\<br />--data-urlencode&nbsp;'username=alice'&nbsp;\<br />--data-urlencode&nbsp;'password=123456'&nbsp;\<br />--data-urlencode&nbsp;'client_id=app-springboot-public'&nbsp;\<br />--data-urlencode&nbsp;'grant_type=password' \<br />|&nbsp;jq</div><br /><div>./get_access_token_from_confidential_client.sh</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->curl&nbsp;--location&nbsp;--request&nbsp;POST&nbsp;'http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token'&nbsp;\<br />--header&nbsp;'Content-Type:&nbsp;application/x-www-form-urlencoded'&nbsp;\<br />--data-urlencode&nbsp;'client_id=app-springboot-confidential'&nbsp;\<br />--data-urlencode&nbsp;'client_secret=3acf7692-49cb-4c45-9943-6f3dba512dae'&nbsp;\<br />--data-urlencode&nbsp;'grant_type=client_credentials' \<br />|&nbsp;jq</div><br />访问一个ACCESS TYPE为Bare only的应用的一个API：<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->access_token=$(curl&nbsp;\<br />-d&nbsp;"client_id=app-springboot-public"&nbsp;\<br />-d&nbsp;"username=alice"&nbsp;\<br />-d&nbsp;"password=123456"&nbsp;\<br />-d&nbsp;"grant_type=password"&nbsp;\<br />"http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token"&nbsp;\<br />|&nbsp;jq&nbsp;-r&nbsp;'.access_token')<br /><br />#echo&nbsp;$access_token<br /><br />curl&nbsp;-H&nbsp;"Authorization:&nbsp;Bearer&nbsp;$access_token"&nbsp;'http://10.80.27.69:8182/products'&nbsp;|&nbsp;jq</div><br />访问用户信息：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->access_token=$(curl&nbsp;\<br />-d&nbsp;"client_id=app-springboot-public"&nbsp;\<br />-d&nbsp;"username=alice"&nbsp;\<br />-d&nbsp;"password=123456"&nbsp;\<br />-d&nbsp;"grant_type=password"&nbsp;\<br />"http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/token"&nbsp;|&nbsp;jq&nbsp;-r&nbsp;'.access_token')<br /><br /><br />curl&nbsp;-H&nbsp;"Authorization:&nbsp;Bearer&nbsp;$access_token"&nbsp;http://10.80.27.69:8180/auth/realms/quickstart/protocol/openid-connect/userinfo&nbsp;|&nbsp;jq</div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-10-08 13:56 <a href="http://www.blogjava.net/paulwong/archive/2020/10/08/435683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>keycloak 资源</title><link>http://www.blogjava.net/paulwong/archive/2020/09/25/435675.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 25 Sep 2020 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/09/25/435675.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435675.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/09/25/435675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435675.html</trackback:ping><description><![CDATA[Keycloak为现代应用和服务提供开源的认证和访问管理，即通常所说的认证和授权。<br />
<br />
Keycloak支持OpenID、OAuth 2.0和SAML 2.0协议；支持用户注册、用户管理、权限管理；支持OTP，支持代理OpenID、SAML 2.0 IDP，支持GitHub、LinkedIn等第三方登录，支持整合LDAP和Active Directory；支持自定义认证流程、自定义用户界面，支持国际化。<br />
<br />
有用户管理界面，可用于API的认证和用户的认证，用户认证需人为输入用户名与密码，API则凭BARE TOKEN即可认证。<br />
<br />
Spring Boot/Angular整合Keycloak实现单点登录<br />
<a href="https://blog.51cto.com/7308310/2446368" target="_blank">https://blog.51cto.com/7308310/2446368</a>
<br /><br />僅十分鐘即可接入Spring Boot/Vue前後端分離應用實現SSO單點登錄<br /><a href="https://kknews.cc/code/a6am5pj.html" target="_blank">https://kknews.cc/code/a6am5pj.html</a><br /><br />SpringBoot整合KeyCloak权限管理<br /><a href="A Quick Guide to Using Keycloak with Spring Boot" target="_blank">https://qianmoq.com/fuwuduan/springboot/springbootzhenghekeycloakquanxianguanli.html</a><br /><br />使用Spring Gateway和KeyCloak构建一个OIDC认证系统<br /><a href="https://zhuanlan.zhihu.com/p/138578359" target="_blank">https://zhuanlan.zhihu.com/p/138578359</a><br /><br />A Quick Guide to Using Keycloak with Spring Boot<br /><a href="https://www.baeldung.com/spring-boot-keycloak" target="_blank">https://www.baeldung.com/spring-boot-keycloak</a><br /><br />Keycloak与微服务的整合<br /><a href="https://gitee.com/itmuch/spring-cloud-yes/blob/master/doc/keycloak-learn/Keycloak%E6%90%AD%E5%BB%BA%E6%89%8B%E6%8A%8A%E6%89%8B%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.md" target="_blank">https://gitee.com/itmuch/spring-cloud-yes/blob/master/doc/keycloak-learn/Keycloak%E6%90%AD%E5%BB%BA%E6%89%8B%E6%8A%8A%E6%89%8B%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.md</a><br /><br />RedHat<br /><a href="https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html/securing_applications_and_services_guide/openid_connect_3" target="_blank">https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html/securing_applications_and_services_guide/openid_connect_3</a><br /><br /><a href="https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html-single/authorization_services_guide/index" target="_blank">https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/html-single/authorization_services_guide/index</a><br /><br /><a href="https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/" target="_blank">https://access.redhat.com/documentation/en-us/red_hat_single_sign-on/7.4/</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-09-25 15:46 <a href="http://www.blogjava.net/paulwong/archive/2020/09/25/435675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>