当前位置: 首页 > 知识库问答 >
问题:

Spring Security OAuth2正确的授权管理器

唐睿
2023-03-14

我尝试配置Spring Security OAuth2。我必须配置身份验证管理器:客户端身份验证管理器和身份验证管理器。如果我正确理解了客户端身份验证管理器(clientAuthenticationManager)用于客户端授权(通过客户端id和客户端机密)和用户授权(通过用户登录和密码)对吗?

但是当我调试我的应用程序时,我看到当我发送http://localhost:8080/myApp/oauth/token请求时,自动化是由AuthManager(不是clientAuthentiationManager)进行的。

我的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:oauth="http://www.springframework.org/schema/security/oauth2"
    xmlns:sec="http://www.springframework.org/schema/security"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security/oauth2 http://www.springframework.org/schema/security/spring-security-oauth2.xsd
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" >

    <http pattern="/oauth/token" create-session="stateless"
        authentication-manager-ref="authenticationManager"
        xmlns="http://www.springframework.org/schema/security">
    <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <anonymous enabled="false" />
    <http-basic entry-point-ref="clientAuthenticationEntryPoint" />

    <custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
    <access-denied-handler ref="oauthAccessDeniedHandler" />
    </http>

    <http pattern="/API/**" create-session="never"
        entry-point-ref="oauthAuthenticationEntryPoint"
        access-decision-manager-ref="accessDecisionManager"
        xmlns="http://www.springframework.org/schema/security">
    <anonymous enabled="false" />

    <intercept-url pattern="/API/**" access="ROLE_RESTREAD" method="GET" />
    <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
    <access-denied-handler ref="oauthAccessDeniedHandler" />
</http>

<http auto-config="false" use-expressions="true"
    disable-url-rewriting="true">
    <intercept-url pattern="/isSessionValid" access="permitAll"
        requires-channel="any" />
    <intercept-url pattern="/**" access="isAuthenticated()"
        requires-channel="any" />
    <form-login login-page="/login" authentication-failure-url="/loginFailed"
        default-target-url="/loginSuccess" always-use-default-target="true" />
    <logout logout-success-url="/login" />
    <session-management>
        <concurrency-control max-sessions="1" />
    </session-management>
</http>

<oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices">  
    <oauth:client-credentials />  
</oauth:authorization-server>
<oauth:resource-server id="resourceServerFilter" token-services-ref="tokenServices" />
<oauth:expression-handler id="oauthExpressionHandler" />
<oauth:web-expression-handler id="oauthWebExpressionHandler" />

<beans:bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.store.JdbcTokenStore" >
    <beans:constructor-arg ref="dataSource" />
</beans:bean>
<beans:bean id="clientDetails" class="org.springframework.security.oauth2.provider.client.JdbcClientDetailsService" >
    <beans:constructor-arg ref="dataSource" />
</beans:bean>
<beans:bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices">
    <beans:property name="tokenStore" ref="tokenStore" />
    <beans:property name="supportRefreshToken" value="false" />
    <beans:property name="clientDetailsService" ref="clientDetails" />
    <beans:property name="accessTokenValiditySeconds" value="400000" />
    <beans:property name="refreshTokenValiditySeconds" value="0" />
</beans:bean>
<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased" >
    <beans:constructor-arg>
        <beans:list>
            <beans:bean class="org.springframework.security.oauth2.provider.vote.ScopeVoter" />
            <beans:bean class="org.springframework.security.access.vote.RoleVoter" />
            <beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter" />
        </beans:list>
    </beans:constructor-arg>
</beans:bean>
<beans:bean id="oauthAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
    <beans:property name="realmName" value="theRealm" />
</beans:bean>
<beans:bean id="clientAuthenticationEntryPoint" class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
    <beans:property name="realmName" value="theRealm/client" />
    <beans:property name="typeName" value="Basic" />
</beans:bean>
<beans:bean id="clientCredentialsTokenEndpointFilter" class="org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter">
    <beans:property name="authenticationManager" ref="clientAuthenticationManager" />
</beans:bean>
<beans:bean id="clientDetailsUserService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService">
    <beans:constructor-arg ref="clientDetails" />
</beans:bean>
<beans:bean id="oauthAccessDeniedHandler" class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" />
<global-method-security pre-post-annotations="enabled" proxy-target-class="true">
    <expression-handler ref="oauthExpressionHandler" />
</global-method-security>
<authentication-manager alias="clientAuthenticationManager">
    <authentication-provider user-service-ref="clientDetailsUserService" />
</authentication-manager>


<beans:bean id="userRepository" class="pl.execon.grm.repository.UserRepository">
    <beans:property name="sessionFactory" ref="sessionFactory" />
</beans:bean>

<beans:bean id="userDetailsService" class="pl.execon.grm.auth.GRMUserDataService">
    <beans:property name="userRepository" ref="userRepository" />
</beans:bean>

<authentication-manager alias="authManager">
    <authentication-provider user-service-ref='userDetailsService'>
        <password-encoder hash="md5" />
    </authentication-provider>
</authentication-manager>

共有1个答案

许焕
2023-03-14

我发现了问题的根源:

代码中:

<authentication-manager alias="clientAuthenticationManager">
    <authentication-provider user-service-ref="clientDetailsUserService" />
</authentication-manager>

我写的别名不是id,所以应该是:

<authentication-manager id="clientAuthenticationManager">
    <authentication-provider user-service-ref="clientDetailsUserService" />
</authentication-manager>

当我使用别名时,默认的身份验证管理器被用来解决OAuth客户端的问题。

 类似资料:
  • 一、授权用户对授权版本信息的管理 1、登录官网,打开个人中心-订单管理 授权流程: 1.当购买授权后,绑定一级域名 2.下载授权证书(加密文件) 3.填写授权码 2、打开后台-设置-授权管理-授权信息 当商家已购买授权时,直接输入授权码;当未购买授权时,点击授权进入官网自行购买 二、在线更新 3.2.0版本后支持在线更新,官方发布版本更新消息后,用户可自行下载更新最新版本。

  • 授权管理器为将基于角色的访问控制集成到应用程序提供了灵活的框架。它让使用这些应用程序的管理员可提供对那些与作业功能相关的已分配用户角色进行访问的权限。

  • 管理组采用逐级授权模式,上级包含下级所有权限(应用管理、通讯录管理、API接口等),权限逐级为:企业创建人>系统管理组>下级管理组 由于每个管理组权限不同,一个管理员只能授权管理一个管理组(系统管理组、二级管理组、三级管理组、四级管理组等) 授权/变更系统管理员 企业创建人可将成员添加为系统管理组管理员,则该管理员具有所有应用和服务号的管理权限,具体操作如下: 1)企业创建人登录企业管理平台:ht

  • 我已经用Jmeter记录了一个应用程序。它显示了一个自动生成的“Http 授权管理器”,其中用户名显示为“${Auth_Login}”,密码显示为 ${Auth_password}。这里出现了一个弹出窗口,我们在应用程序中提供OTP。请找到下面的截图:在这里输入图像描述 运行脚本时,它显示为:在此处输入图像描述 请帮帮忙。

  • http://docs.mongodb.org/manual/tutorial/add-user-administrator/ 2)然后我编辑了mongod.conf,取消了这一行的注释 4)我可以连接,但它在连接时说了这句话。 5)现在,我创建的这个用户似乎根本没有权限。 问题出在哪里?我将整个过程重复了3次,并且 我认为我是按照MongoDB文档中指定的方式完成的。但它不起作用。 我希望这个用

  • 问题内容: 我正在使用Checkmarx安全工具来扫描我的代码,这就是说,当我对数据库执行executeUpdate()命令时,即为“不正确的资源访问授权”。 各种谷歌搜索没有成功。 问题答案: 添加一些执行访问控制检查的代码,这些代码使用诸如“ admin ”,“ authoriz ”或“ allowed ”之类的词