Search code examples
javasecurityauthenticationweblogic12c

Authentication Provider : SecurityProvider service class name for XXXX is not specified in WL 12.1.3.0.0


I've just created an Authentication Provider for WebLogic Server Version 12.1.3.0.0, (The Authentication Provider adheres to the standard JAAS framework by structuring the authentication sequence on top of a number of configurable JAAS LoginModules. ) but when I start Wl I have this error:

Here the steps:

1) set ENV

%WL_HOME%/server/bin/setWLSEnv.cmd

2) generate the MBean and stubs:

java -cp %WL_HOME%/server/lib/* -verbose -DcreateStubs="true" \
weblogic.management.commo.WebLogicMBeanMaker -MDF WSAuthentication.xml \
-files C:\Development\Workspaces\Eclipse\WLAuthenticationProvider\src

3) package the authentication provider and login module with the generated stub and MBI files.

java -DMJF=C:\Development\Workspaces\Eclipse\WLAuthenticationProvider\jar\WSAuthentication.jar \
-Dfiles=C:\Development\Workspaces\Eclipse\WLAuthenticationProvider\src weblogic.management.commo.WebLogicMBeanMaker

4) add -DUseSunHttpHandler=true to startWebLogic.cmd

weblogic.security.service.SecurityServiceRuntimeException: [Security:090877]Service Common JAASAuthenticationService unavailable, see exception text: com.bea.common.engine.ServiceInitializationException: com.bea.common.engine.SecurityServiceRuntimeException: [Security:097533]SecurityProvider service class name for MyAuthentication is not specified.
        at weblogic.security.service.PrincipalAuthenticator.initialize(PrincipalAuthenticator.java:155)
        at weblogic.security.service.PrincipalAuthenticator.<init>(PrincipalAuthenticator.java:315)
        at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.doATN(CommonSecurityServiceManagerDelegateImpl.java:731)
        at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.postInitializeRealm(CommonSecurityServiceManagerDelegateImpl.java:515)
        at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.postLoadRealm(CommonSecurityServiceManagerDelegateImpl.java:861)
        at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.postInitializeRealms(CommonSecurityServiceManagerDelegateImpl.java:927)
        at weblogic.security.service.CommonSecurityServiceManagerDelegateImpl.postInitialize(CommonSecurityServiceManagerDelegateImpl.java:1109)
        at weblogic.security.service.SecurityServiceManager.postInitialize(SecurityServiceManager.java:943)
        at weblogic.security.SecurityService.start(SecurityService.java:159)
        at weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:78)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1017)
        at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:388)
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:430)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456)
        at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225)
        at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:606)
        at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77)
        at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:231)
        at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:254)
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:413)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456)
        at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225)
        at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:606)
        at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:77)
        at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:231)
        at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:254)
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:413)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456)
        at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:225)
        at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:82)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2488)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:98)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87)
        at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162)
        at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:553)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
Caused by: com.bea.common.engine.ServiceInitializationException: com.bea.common.engine.SecurityServiceRuntimeException: [Security:097533]SecurityProvider service class name for TntWS2Authentication is not specified.
        at com.bea.common.engine.internal.ServiceEngineImpl.findOrStartService(ServiceEngineImpl.java:365)
        at com.bea.common.engine.internal.ServiceEngineImpl.findOrStartService(ServiceEngineImpl.java:315)
        at com.bea.common.engine.internal.ServiceEngineImpl.lookupService(ServiceEngineImpl.java:257)
        at com.bea.common.engine.internal.ServicesImpl.getService(ServicesImpl.java:72)
        at weblogic.security.service.CSSWLSDelegateImpl.getService(CSSWLSDelegateImpl.java:155)
        at com.bea.security.css.CSS.getService(CSS.java:123)
        at weblogic.security.service.PrincipalAuthenticator.initialize(PrincipalAuthenticator.java:132)
        ... 46 more
Caused by: com.bea.common.engine.SecurityServiceRuntimeException: [Security:097533]SecurityProvider service class name for MyAuthentication is not specified.
        at com.bea.common.security.internal.legacy.service.SecurityProviderImpl.init(SecurityProviderImpl.java:42)
        at com.bea.common.engine.internal.ServiceEngineImpl.findOrStartService(ServiceEngineImpl.java:363)
        ... 52 more

Here my file MyAuthentication.xml (A simple MDF (MyAuthentication.xml) for an authentication provider). WebLogic's provider architecture is MBean-based

<?xml version="1.0" ?>
<!DOCTYPE MBeanType SYSTEM "commo.dtd">
<MbeanType 
        Name = "MyAuthentication" 
        DisplayName = "MyAuthentication"
        Package = "fr.telecom.devices.ws.security.iap"
        Extends = "weblogic.management.security.authentication.Authenticator"
        PersistPolicy = "OnUpdate"  >

<MbeanAttribute 
        Name = "ProviderClassName" 
        Type = "java.lang.String"
        Writeable = "false"
        Default ="&quot;fr.telecom.devices.ws.security.iap.MyAuthenticationProviderImpl&quot;"
      />

    <MbeanAttribute Name = "Description" Type = "java.lang.String"
      Writeable = "false"
      Default = "&quot;Traces Authentication Provider&quot;"
      />

    <MBeanAttribute Name = "Version" Type = "java.lang.String"
      Writeable = "false" Default = "&quot;1.0&quot;"
      />

</MbeanType>

and here the file META-INF\binding-file.xml :

<?xml version="1.0" encoding="UTF-8"?>
<ns:binding-config xmlns:ns="http://www.bea.com/ns/staxb/binding-config/90">
  <ns:bindings>
    <ns:binding-type xsi:type="ns:by-name-bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ns:xmlcomponent>t=tnt-ws2-authenticationType@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
      <ns:qname-property>
        <ns:xmlcomponent>t=string@http://www.w3.org/2001/XMLSchema</ns:xmlcomponent>
        <ns:javatype>java.lang.String</ns:javatype>
        <ns:getter>
          <ns:method-name>getName</ns:method-name>
        </ns:getter>
        <ns:setter>
          <ns:method-name>setName</ns:method-name>
          <ns:param-type>java.lang.String</ns:param-type>
        </ns:setter>
        <ns:issetter>
          <ns:method-name>isNameSet</ns:method-name>
        </ns:issetter>
        <ns:qname xmlns:sec="http://xmlns.oracle.com/weblogic/security">sec:name</ns:qname>
        <ns:nillable>true</ns:nillable>
      </ns:qname-property>
      <ns:qname-property>
        <ns:xmlcomponent>t=string@http://www.w3.org/2001/XMLSchema</ns:xmlcomponent>
        <ns:javatype>java.lang.String</ns:javatype>
        <ns:getter>
          <ns:method-name>getCompatibilityObjectName</ns:method-name>
        </ns:getter>
        <ns:setter>
          <ns:method-name>setCompatibilityObjectName</ns:method-name>
          <ns:param-type>java.lang.String</ns:param-type>
        </ns:setter>
        <ns:issetter>
          <ns:method-name>isCompatibilityObjectNameSet</ns:method-name>
        </ns:issetter>
        <ns:qname xmlns:sec="http://xmlns.oracle.com/weblogic/security">sec:compatibility-object-name</ns:qname>
        <ns:nillable>true</ns:nillable>
      </ns:qname-property>
      <ns:qname-property>
        <ns:xmlcomponent>t=string@http://www.w3.org/2001/XMLSchema</ns:xmlcomponent>
        <ns:javatype>java.lang.String</ns:javatype>
        <ns:getter>
          <ns:method-name>getControlFlag</ns:method-name>
        </ns:getter>
        <ns:setter>
          <ns:method-name>setControlFlag</ns:method-name>
          <ns:param-type>java.lang.String</ns:param-type>
        </ns:setter>
        <ns:issetter>
          <ns:method-name>isControlFlagSet</ns:method-name>
        </ns:issetter>
        <ns:qname xmlns:sec="http://xmlns.oracle.com/weblogic/security">sec:control-flag</ns:qname>
        <ns:nillable>true</ns:nillable>
      </ns:qname-property>
    </ns:binding-type>
    <ns:binding-type xsi:type="ns:simple-document-binding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ns:xmlcomponent>e=tnt-ws2-authentication@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
      <ns:type-of-element>t=tnt-ws2-authenticationType@http://xmlns.oracle.com/weblogic/security/extension</ns:type-of-element>
    </ns:binding-type>
  </ns:bindings>
  <ns:xml-to-pojo>
    <ns:mapping>
      <ns:xmlcomponent>t=tnt-ws2-authenticationType@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
    </ns:mapping>
    <ns:mapping>
      <ns:xmlcomponent>e=tnt-ws2-authentication@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
    </ns:mapping>
  </ns:xml-to-pojo>
  <ns:xml-to-xmlobj/>
  <ns:java-to-xml>
    <ns:mapping>
      <ns:xmlcomponent>t=tnt-ws2-authenticationType@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
    </ns:mapping>
  </ns:java-to-xml>
  <ns:java-to-element>
    <ns:mapping>
      <ns:xmlcomponent>e=tnt-ws2-authentication@http://xmlns.oracle.com/weblogic/security/extension</ns:xmlcomponent>
      <ns:javatype>eu.cec.sanco.tracesnt.ws.security.iap.TntWS2AuthenticationMBeanImpl</ns:javatype>
    </ns:mapping>
  </ns:java-to-element>
</ns:binding-config>

this is the structure os the project

enter image description here


Solution

  • There can be many reasons, but I guess it is a package problem. Please, check if your resulting provider .jar contains a file called META-INF/binding-file.xml and check if this file has bindind node as follows:

    <ns:binding-type xsi:type="ns:by-name-bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <ns:xmlcomponent>[email protected]</ns:xmlcomponent>
        <ns:javatype>fr.telecom.devices.ws.security.iap.MyAuthenticationMBeanImpl</ns:javatype>
    

    your.namespace must be defined in build.xml into WebLogicMBeanMAker as -target parameter.

    Tell me also if your resulting provider .jar looks like this

    .
    ├── commo.dtd
    ├── MyAuthentication-Mbean.xml
    ├── fr
    │   └── telecom
    │       └── devices
    │           └── ws
    │               └── security
    │                   └── iap
    │                       ├── impl
    │                       │   ├── MyAuthenticationProviderImpl.class
    │                       │   ├── ...
    │                       │   └── ...
    │                       └── mbeans
    │                           ├── MyAuthenticationImpl.class
    │                           ├── MyAuthenticationMBean.class
    │                           ├── MyAuthenticationImplBeanInfo.class
    │                           ├── MyAuthenticationMBeanImpl.class
    │                           ├── MyAuthentication$Helper.class
    │                           └── MyAuthentication$SchemaHelper2.class
    ├── META-INF
    │   ├── beaninfofactory.txt
    │   ├── binding-file.ser
    │   ├── binding-file.xml
    │   ├── binding-mapping-file.ser
    │   ├── MANIFEST.MF
    │   └── schemas
    │       └── schema-0.xsd
    ├── schemacom_bea_xml
    │   ├── element
    │   │   └── your_2Enamespace
    │   │       └── my_2Dauthentication_2Dap.xsb
    │   ├── namespace
    │   │   └── your_2Enamespace
    │   │       └── xmlns.xsb
    │   ├── system
    │   │   └── sED25F267F5545F2AED6F8F098FF3212F
    │   │       ├── myauthentication94aadoctype.xsb
    │   │       ├── myauthentication.xsb
    │   │       ├── myauthentication7480type.xsb
    │   │       ├── index.xsb
    │   │       └── TypeSystemHolder.class
    │   └── type
    │       └── es_2Esescam_2Eprovider
    │           └── my_2Dauthentication2DapType.xsb
    └── weblogic
          ├── descriptor
          │   └── SettableBean.class
          └── management
              └── security
                  └── LDAP_DB_WLS12C_PROVIDER18595502884856BeanInfoFactory.class
    

    If your are missing something I would like to know what is that.

    Edit

    I edit my answer in response to your comment, and answer edition.

    I can see in your META-INF\binding-file.xml there is no custom namespace in <ns:xmlcomponent> node.

    To specify targetNamespace in the WebLogicMBeanMaker command, you can change your command as follows (It is shown such way for clarity):

    java 
      -DMJF=C:\...\...\WLAuthenticationProvider\jar\WSAuthentication.jar \
      -Dfiles=C:\...\...\WLAuthenticationProvider\src \ 
      -DtargetNameSpace= your.own.namespace \
      weblogic.management.commo.WebLogicMBeanMaker