The Elytron SASL mechanism implementations don't throw IllegalStateException when calling the getNegotiatedProperty() method before the negotiation is finished.
The contract of the Object javax.security.sasl.SaslClient.getNegotiatedProperty(String propName) says:
Retrieves the negotiated property. This method can be called only after the authentication exchange has completed (i.e., when isComplete() returns true); otherwise, an IllegalStateException is thrown.
The same is valid for the SaslServer interface.