Hi,
I'm now able to register my webauthn device, to login, and trust my device.
What I noticed is that the allowed-origins (device registering) property
and application-id extension (connect) seem now mandatory to me, (though it
was not in 6.5.9).
Without those two settings, I'm stuck.
web-authn:
core:
relying-party-id: mydomain.fr
relying-party-name: myrpname
allowed-origins: https://cas-dev.mydomain.fr
trusted-device-enabled: true
application-id: https://cas-dev.mydomain.fr/test
First, I want to say that I thank you all for your precious advices !
(@PreAuthorize("isAuthenticated()") + WebAuthnConfiguration.java trick)
This won't go in production right now, because I wonder about the security
impact when accessing the webauthn/register endpoint ... ?
Regards,
Le mercredi 29 mars 2023 à 16:15:00 UTC+2, John a écrit :
> What does your cas.log state for error? Are you using a valid ssl
> certificate, cas host name matches whats in config? Also, in 7.x/master you
> have to edit this,
>
>
> https://github.com/apereo/cas/blob/master/support/cas-server-support-webauthn/src/main/java/org/apereo/cas/config/WebAuthnConfiguration.java#L437
>
> with the below,
>
> return List.of(WebAuthnController.BASE_ENDPOINT_WEBAUTHN +
> WebAuthnController.WEBAUTHN_ENDPOINT_AUTHENTICATE,
> WebAuthnController.BASE_ENDPOINT_WEBAUTHN +
> WebAuthnController.WEBAUTHN_ENDPOINT_REGISTER);
>
> There's actually 2 bugs, maybe more. One is the PreAuthorize and the other
> is CSRF related to spring 6/spring boot 3 and possible another bug. I fixed
> the csrf issue and still working through the other as time permits.
>
>
> On Wednesday, March 29, 2023 at 4:29:34 AM UTC-5 [email protected] wrote:
>
>> Thank you, you saved me lots of time, actually I needed those two :
>> implementation "org.springframework.security:spring-security-config"
>> implementation "org.springframework.security:spring-security-web"
>>
>> But I still have an js issue (JSON.Parse) when registering my device :
>>
>> "Registration failed SyntaxError: JSON.parse: unexpected non-digit at
>> line 1 column 2 of the JSON data" after the POST request on
>> https://cas-xx.xxx.fr/cas/webauthn/register.
>> (Chrome says the same: Registration failed SyntaxError: No number after
>> minus sign in JSON at position 1.)
>>
>> The error is caught here :
>> # register https://cas-xx.xxxxxx.fr/cas/js/webauthn/webauthn.js:477.
>> # (Asynchrone : promise callback) / register
>> https://cas-xx.xxxx.fr/cas/js/webauthn/webauthn.js:475
>> #
>> https://cas-xx.xxxxxx.fr/cas/login?service=https://node-cas-xxxxx.addomain.xxxxxxx.fr:9446/sample/&renew=true:390
>> .
>>
>> (The webapp is an instance of cas-sample-java-webapp running on port
>> 9446.)
>>
>> About JSON.Parse :
>> https://xxxxcas/login?service=https://xxxxx:9446/sample/&renew=true at
>> lines 386 and 390 : register(username, displayName, credentialNickname,
>> csrfToken);
>>
>> In my browser debugger, data seems present, as I can see them parsed by
>> the function getRegisterRequest in webauthn.js line 327:
>>
>> arguments: Arguments
>> 0: {…}
>> authenticate: "webauthn/authenticate"
>> register: "webauthn/register"
>> <prototype>: {…}
>> 1: "frederic.dussurget"
>> 2: "Frederic Dussurget"
>> 3: "wonderful_borg"
>> 4: false
>> callee:
>> length: 5
>> Symbol(Symbol.iterator):values()
>> <get callee()>: ()
>> <set callee()>: ()
>> <prototype>: {…
>> credentialNickname: "wonderful_borg"
>> displayName: "Frederic Dussurget"
>> requireResidentKey: false
>> urls: {…}
>> authenticate: "webauthn/authenticate"
>> register: "webauthn/register"
>> <prototype>: {…}
>> username: "frederic.dussurget"
>>
>> I you guys have any idea ...
>> Regards,
>> Le vendredi 24 mars 2023 à 04:57:51 UTC+1, John a écrit :
>>
>>> Spring security and probably one or 2 of the webauthn, I dont remeber at
>>> the moment with looking at local commit history but here is all from gradle,
>>>
>>>
>>> /** Core **/
>>> implementation
>>> "org.apereo.cas:cas-server-core-api-configuration-model"
>>> implementation "org.apereo.cas:cas-server-core-api-mfa"
>>> implementation "org.apereo.cas:cas-server-core-events-configuration"
>>> implementation "org.apereo.cas:cas-server-core-notifications"
>>> implementation "org.apereo.cas:cas-server-core-authentication"
>>> implementation "org.apereo.cas:cas-server-core-authentication-api"
>>> implementation
>>> "org.apereo.cas:cas-server-core-authentication-mfa-api"
>>> implementation "org.apereo.cas:cas-server-core-util"
>>> implementation "org.apereo.cas:cas-server-core-web-api"
>>> implementation "org.apereo.cas:cas-server-core-webflow"
>>> implementation "org.apereo.cas:cas-server-core-webflow-api"
>>> implementation "org.apereo.cas:cas-server-core-webflow-mfa-api"
>>> implementation "org.apereo.cas:cas-server-webapp"
>>> implementation "org.apereo.cas:cas-server-webapp-init"
>>> implementation "org.apereo.cas:cas-server-webapp-config"
>>>
>>> /** Rest Plugins **/
>>> implementation
>>> "org.apereo.cas:cas-server-support-configuration-cloud-rest"
>>> implementation
>>> "org.apereo.cas:cas-server-support-rest-authentication"
>>>
>>> /** LDAP Support **/
>>> implementation "org.apereo.cas:cas-server-support-ldap"
>>> implementation "org.apereo.cas:cas-server-support-pm-ldap"
>>> implementation "org.apereo.cas:cas-server-support-pm-rest"
>>>
>>> /** Database Support **/
>>> implementation "org.apereo.cas:cas-server-support-jdbc"
>>> implementation "org.apereo.cas:cas-server-support-jpa-util"
>>> implementation "mysql:mysql-connector-java:${project.mysqlVerison}"
>>> implementation
>>> "com.microsoft.sqlserver:mssql-jdbc:${project.mssqlVersion}"
>>>
>>> /** Interrupt Support **/
>>> implementation "org.apereo.cas:cas-server-support-interrupt-webflow"
>>>
>>> /** Multifactor Auth **/
>>> implementation "org.apereo.cas:cas-server-support-gauth"
>>> implementation "org.apereo.cas:cas-server-support-gauth-ldap"
>>> implementation "org.apereo.cas:cas-server-support-webauthn"
>>> implementation "org.apereo.cas:cas-server-support-webauthn-ldap"
>>> implementation "org.apereo.cas:cas-server-support-webauthn-core"
>>> implementation
>>> "org.apereo.cas:cas-server-support-webauthn-core-webflow"
>>> implementation "org.apereo.cas:cas-server-support-simple-mfa"
>>> implementation "org.apereo.cas:cas-server-support-trusted-mfa"
>>>
>>> /** Protocols **/
>>> implementation "org.apereo.cas:cas-server-support-ws-idp"
>>> implementation "org.apereo.cas:cas-server-support-saml-idp"
>>> implementation
>>> "org.apereo.cas:cas-server-support-saml-sp-integrations"
>>>
>>>
>>> /** Services **/
>>> /** implementation
>>> "org.apereo.cas:cas-server-support-json-service-registry" **/
>>> implementation
>>> "org.apereo.cas:cas-server-support-rest-service-registry"
>>>
>>> implementation
>>> "org.springframework.security:spring-security-config:5.7.3"
>>> implementation "commons-net:commons-net:${project.apacheNetCom}"
>>> On Thursday, March 23, 2023 at 2:51:11 PM UTC-5 [email protected]
>>> wrote:
>>>
>>>> Hi, I've got quite the same issue : it works perfectly with CAS 6.5.9
>>>> but not on 6.6 nor on the master branch 7.x.
>>>> On 6.6, after basic auth, a popup asks for the Yubikey pin and then,
>>>> when I press the register button,the flow breaks at POST
>>>> https://xxxxxxx.xx/cas/webauthn/register/finish. (FF : err 400
>>>> strict-origin-when-cross-origin)
>>>>
>>>> (The service app I use for my tests is the same when I wetn thru every
>>>> CAS version)
>>>>
>>>> webAuthnDevices.acces endpoint is AUTHENTICATED in my cas.yml just as
>>>> you did
>>>>
>>>> here is my build.gradle webauthn section :
>>>> // MFA FIDO2 WEBAUTHN
>>>> implementation
>>>> "org.apereo.cas:cas-server-support-webauthn:${project.'cas.version'}"
>>>> implementation
>>>> "org.apereo.cas:cas-server-support-webauthn-redis:${project.'cas.version'}"
>>>> implementation
>>>> "org.apereo.cas:cas-server-support-webauthn-core:${project.'cas.version'}"
>>>> (this one in order to comment out @PreAuthorize("isAuthenticated()") as
>>>> you did in
>>>> src/main/java/org/apereo/cas/webauthn/web/WebAuthnController.java )
>>>>
>>>> //MFA TRUSTED DEVICE
>>>> implementation
>>>> "org.apereo.cas:cas-server-support-trusted-mfa:${project.'cas.version'}"
>>>> implementation
>>>> "org.apereo.cas:cas-server-support-trusted-mfa-redis:${project.'cas.version'}"
>>>>
>>>> (John, what are the extra dependencies that you implement in your
>>>> build.gradle cas overlay to be able to modify the
>>>> src/main/java/org/apereo/cas/config/WebAuthnConfiguration.java
>>>> <https://github.com/apereo/cas/blob/master/support/cas-server-support-webauthn/src/main/java/org/apereo/cas/config/WebAuthnConfiguration.java#L437>
>>>>
>>>> ? Compilation breaks)
>>>>
>>>> Regards,
>>>>
>>>>
>>>> Le jeudi 16 mars 2023 à 04:25:47 UTC+1, John a écrit :
>>>>
>>>>> Circling back to this, it also fails on 7.x current and master. Same
>>>>> issue, I believe I have found the source which is related to the csrf
>>>>> token. It works by excluding the /register from csrf to the ignored
>>>>> endpoints on
>>>>>
>>>>>
>>>>> https://github.com/apereo/cas/blob/master/support/cas-server-support-webauthn/src/main/java/org/apereo/cas/config/WebAuthnConfiguration.java#L437
>>>>>
>>>>> with the below,
>>>>>
>>>>> return List.of(WebAuthnController.BASE_ENDPOINT_WEBAUTHN +
>>>>> WebAuthnController.WEBAUTHN_ENDPOINT_AUTHENTICATE,
>>>>> WebAuthnController.BASE_ENDPOINT_WEBAUTHN +
>>>>> WebAuthnController.WEBAUTHN_ENDPOINT_REGISTER);
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Monday, February 6, 2023 at 9:53:31 PM UTC-6 John wrote:
>>>>>
>>>>>> Since we don't use any of the actuators, all disabled except for
>>>>>> whatever cas sets as default, I am leaving my change by commenting out
>>>>>> @PreAuthorize("isAuthenticated()") in WebAuthnController.java. I'm just
>>>>>> going along finishing upgrade testing for us and will circle back to
>>>>>> this
>>>>>> later before we upgrade prod.
>>>>>>
>>>>>> However, I do see some changes made below, I haven't had time to test
>>>>>> if it will resolve this issue yet, maybe it will be part of next 7.x RC
>>>>>> but
>>>>>> for now its only in master. If I get some time I will switch to master
>>>>>> and
>>>>>> give it a go.
>>>>>>
>>>>>>
>>>>>> https://github.com/apereo/cas/commits/master/support/cas-server-support-webauthn/src/main/java/org/apereo/cas/config/WebAuthnConfiguration.java
>>>>>>
>>>>>>
>>>>>> On Friday, February 3, 2023 at 7:11:44 AM UTC-6 [email protected]
>>>>>> wrote:
>>>>>>
>>>>>>> Yes, I have the same registration issue.
>>>>>>>
>>>>>>> I thought I have caused this error by meddling with the spring
>>>>>>> security settings, but it looks like it is not the case.
>>>>>>>
>>>>>>> However, after setting up spring security for the webAuthnDevices
>>>>>>> actuator like this
>>>>>>>
>>>>>>> spring.security.user.name=XXX
>>>>>>>
>>>>>>> spring.security.user.password=YYY
>>>>>>>
>>>>>>> cas.monitor.endpoints.endpoint.webAuthnDevices.access=AUTHENTICATED
>>>>>>>
>>>>>>>
>>>>>>> then registration starts to work, but requires HTTP basic
>>>>>>> authentication.
>>>>>>>
>>>>>>>
>>>>>>> This is spring security filter chain for /webauthn/register endpoint
>>>>>>> without any additional configuration:
>>>>>>>
>>>>>>> Security filter chain: [
>>>>>>>
>>>>>>> ChannelProcessingFilter
>>>>>>>
>>>>>>> WebAsyncManagerIntegrationFilter
>>>>>>>
>>>>>>> CorsFilter
>>>>>>>
>>>>>>> CsrfFilter
>>>>>>>
>>>>>>> SecurityContextHolderAwareRequestFilter
>>>>>>>
>>>>>>> AnonymousAuthenticationFilter
>>>>>>>
>>>>>>> ExceptionTranslationFilter
>>>>>>>
>>>>>>> AuthorizationFilter
>>>>>>>
>>>>>>> ]
>>>>>>>
>>>>>>> And the chain with the spring security settings as above:
>>>>>>>
>>>>>>> Security filter chain: [
>>>>>>>
>>>>>>> ChannelProcessingFilter
>>>>>>>
>>>>>>> WebAsyncManagerIntegrationFilter
>>>>>>>
>>>>>>> CorsFilter
>>>>>>>
>>>>>>> CsrfFilter
>>>>>>>
>>>>>>> BasicAuthenticationFilter
>>>>>>>
>>>>>>> SecurityContextHolderAwareRequestFilter
>>>>>>>
>>>>>>> AnonymousAuthenticationFilter
>>>>>>>
>>>>>>> ExceptionTranslationFilter
>>>>>>>
>>>>>>> AuthorizationFilter
>>>>>>>
>>>>>>> ]
>>>>>>>
>>>>>>>
>>>>>>> I would say that
>>>>>>>
>>>>>>> 1) setting the actuator access really influences the processing
>>>>>>> for registration endpoint (and it should not),
>>>>>>>
>>>>>>> 2) using PERMIT or ANONYMOUS is not enough to make it work, as
>>>>>>> perhaps it does not satisfy the @PreAuthorize("isAuthenticated()")
>>>>>>> requirement
>>>>>>>
>>>>>>> I wonder how the registration endpoint should be authenticated; I
>>>>>>> guess it can not be left unprotected but I fail to see how to set it up.
>>>>>>>
>>>>>>> Regards,
>>>>>>>
>>>>>>> Michal V.
>>>>>>>
>>>>>>> On 1/31/23 16:14, John wrote:
>>>>>>>
>>>>>>> I have nothing configured or defined for endpoints or actuators
>>>>>>> besides what is default set by cas, we have never used those. I went
>>>>>>> back
>>>>>>> and configured according to
>>>>>>>
>>>>>>> management.endpoint.webAuthnDevices.enabled=true
>>>>>>> management.endpoints.web.exposure.include=*
>>>>>>> cas.monitor.endpoints.endpoint.webAuthnDevices.access=PERMIT
>>>>>>>
>>>>>>> even tried ANONYMOUS below, which makes all actuators work, I can
>>>>>>> even pull /cas/actuator/webAuthnDevices/username anonymously and gets
>>>>>>> devices for user. I don't think the endpoint webAuthnDevices controls
>>>>>>> the
>>>>>>> end user registration page as it falls under/webauthn/register and NOT
>>>>>>> /cas/actuator/webAuthnDevices
>>>>>>>
>>>>>>> cas.monitor.endpoints.endpoint.defaults.access=ANONYMOUS
>>>>>>>
>>>>>>> Below is debug output,
>>>>>>>
>>>>>>> 2023-01-31 09:05:41,149 DEBUG
>>>>>>> [org.apereo.cas.web.FlowExecutionExceptionResolver] - <Ignoring the
>>>>>>> received exception
>>>>>>> [org.springframework.security.access.AccessDeniedException: Access is
>>>>>>> denied] due to a type mismatch with handler
>>>>>>> [org.apereo.cas.webauthn.web.WebAuthnController#startRegistration(String,
>>>>>>>
>>>>>>> String, String, boolean, String, HttpServletRequest,
>>>>>>> HttpServletResponse)]>
>>>>>>>
>>>>>>> And browser POST response to /webauthn/register , base64 decoded is
>>>>>>>
>>>>>>> --- !<java.util.LinkedHashMap>
>>>>>>> timestamp: "2023-01-31T15:05:41.161+00:00"
>>>>>>> status: 403
>>>>>>> error: "Forbidden"
>>>>>>> path: "/cas/webauthn/register"
>>>>>>>
>>>>>>>
>>>>>>> On Monday, January 30, 2023 at 11:16:42 PM UTC-6 [email protected]
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> have you, by any chance, configured spring security for the
>>>>>>>> webauthn endpoint?
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> Michal Vocu
>>>>>>>>
>>>>>>>> On 1/26/23 19:03, John wrote:
>>>>>>>>
>>>>>>>> When trying to register a new device, the POST request to
>>>>>>>> /webauthn/register is failing from spring security, access denied,
>>>>>>>> http 403.
>>>>>>>>
>>>>>>>> Commenting out the below within
>>>>>>>> (support/cas-server-support-webauthn-core/src/main/java/org/apereo/cas/webauthn/web/WebAuthnController.java)
>>>>>>>>
>>>>>>>> got it working again,
>>>>>>>>
>>>>>>>> @PreAuthorize("isAuthenticated()")
>>>>>>>>
>>>>>>>> Looks like it was added in 6.4.x release, is anyone else not having
>>>>>>>> a registration issue?
>>>>>>>>
>>>>>>>> --
>>>>>>>> - Website: https://apereo.github.io/cas
>>>>>>>> - Gitter Chatroom: https://gitter.im/apereo/cas
>>>>>>>> - List Guidelines: https://goo.gl/1VRrw7
>>>>>>>> - Contributions: https://goo.gl/mh7qDG
>>>>>>>> ---
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "CAS Community" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to [email protected].
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/a/apereo.org/d/msgid/cas-user/5ad6db18-8a87-41e9-8216-98f6c1fa8492n%40apereo.org
>>>>>>>>
>>>>>>>> <https://groups.google.com/a/apereo.org/d/msgid/cas-user/5ad6db18-8a87-41e9-8216-98f6c1fa8492n%40apereo.org?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>>
>>>>>>>>
--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
---
You received this message because you are subscribed to the Google Groups "CAS
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/a/apereo.org/d/msgid/cas-user/f648c1c9-876b-47c6-a177-90332f2c4been%40apereo.org.