Nuñito Calzada
Nuñito Calzada

Reputation: 2146

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

Upvotes: 6

Views: 3606

Answers (4)

Okan KOCAT&#220;RK
Okan KOCAT&#220;RK

Reputation: 101

Double check the class name in the MyAuthenticator.xml provided

fr.telecom.devices.ws.security.iap.MyAuthenticationProviderImpl

should be correct with namespaces

Upvotes: 1

Pubudu Jayasanka
Pubudu Jayasanka

Reputation: 1462

I also got this error when I'm going to implement custom authentication provider. There aren't very good tutorials to create custom authentication providers. I tried with the maven and it's working. I found this working tutorial in GitHub. Example Code can be clone here

There is an ebook that you can use to get whole idea of creating weblogic custom authentication provider. Ebook link

You may need to change com.bea.core.common.security.api_1.1.0.0_6-2-0-0.jar file to this com.bea.core.common.security.api_1.1.0.0_6-2-0-0.jar

Upvotes: 2

metatechbe
metatechbe

Reputation: 657

If you want to be also compatible with WebLogic 12.2.x, you need to define "@default" Javadoc annotation for default values, and "@encrypted" Javadoc annotations for encrypted values (passwords, ...)

public interface LdapAuthenticatorMBean extends StandardInterface, DescriptorBean, AuthenticatorMBean {

/**
 * @default "com.mycompany.LdapAuthenticatorProviderImpl"
 */
public String getProviderClassName();

/**
 * @no-default 
 * @encrypted
 */
public String getTechPass();

and also define setter and getters methods for each property (previously it was not strictly required).

Upvotes: 2

malaguna
malaguna

Reputation: 4233

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

Upvotes: 2

Related Questions