Showing posts with label wso2esb. Show all posts
Showing posts with label wso2esb. Show all posts

Wednesday, February 13, 2013

Authentication and Authorization with WSO2ESB and WSO2IS

This is very impotent post because I'm going to discuss how to secure the proxy service with Username Token  as well as Authorization with XACML policies.

For Authorization we are using the WSO2 Identity server and Inbuilt Entitlement mediator in WSO2 ESB.

Authentication and Authorization

You can see the high level view of the ESB and IS communication. Let me explain the scenario.

1. User going to access the proxy service with the user credentials.
2. ESB authenticate the user first
3. If the authentication pass then go to Identity Server through the Entitlement Mediator and call the get decision method with above credentials
4. Identity Server will look the XACML policies and return the decision.
5. If decision is "Permit" then proxy service allow to access the echo service
6. If decision is "Deny" or "Not applicable" proxy service not allow to access the echo service.

Lets look at the configuration of this setup. We are using ESB-4.6.0 and IS-4.1.0

1. You have to share the same User store with WSO2ESB and WSO2IS
refer the ESB user-mgt.xml and IS user-mgt.xml - this is done for Embedded LDAP coming with WSO2IS but you can configure any DB as your user store and share with both ESB and IS

2. Start the IS first and then ESB with port offset 1
3. Create "In sequence" in ESB
here you need to add the entitlement mediator as a first child of In Sequence
esb

Select the entitlement and set the entitlement server url, username and password.
entitlement server url = https://localhost:9443/services/
username = admin
password = admin
esb

Set the Fault mediators under OnReject as well as set the Send mediator under OnAccept

Set the Header mediator as follows and remove the security headers.
esb

Click on the Namespaces and put the following entry.
Prefix - wsse
URI - http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
esb

3. Create "Out sequence" in ESB
just put send and log mediators as follows
esb

4. Now we need create the proxy service for echo service already in WSO2ESB
Add new proxy -> custom proxy then you can see the following window and you have to specify the following details.
Name - EchoProxy
Publishing WSDL - Specify source URI
then put the wsdl of the echo service as "http://localhost:8281/services/echo?wsdl"
esb

Move next and select the "InSequence" that we created before.
esb

Move next again and select the "OutSequence" as well.
esb

finally click the finish
Now you have to create the new role "testRole" with admin permission and new user "testuser" with password "testuser" and assign the "testRole" because we are using this to control the access . then secure the created proxy with Username Token as follows

esb

esb

esb

Now you complete the proxy service creation and lets move to Identity server configurations.

5. In Identity server we need to add the XACML Policy
Here I'm going to create the simple User base XACML policy.

Name - EchoServicePolicy
Specify the Role name as "testRole" as well as you have to specify the action as "read" because our Entitlement mediator send the action string as "read"
is

Finish the policy and enable the policy to test.
is

Now you can evaluate the policy through the Tryit.

is

But if you click on the "Evaluate with PDP" you will not get Premit because still you not promote the XACML policy to the PDP.

to promote XACML policy to the PDP you can click on the button in front of the policy "sync with PDP". Now try to "Evaluate with PDP".

Now we done the configuration on Identity Server.

6. Go to ESB and select the EchoProxy service and go to TryIt.
esb

Here we are using "testuser" which is under the role "testRole" so the XACML engine will permit to access the resource
is

Now go and remove the "testRole" form user "testuser" and try to access the service. Now you can see XACML engine is not permit to user to access the resource.
esb

Wednesday, December 19, 2012

Invoke secured service(Sign and encrypt) from SoapUI 4.0.0

Here we are using the WSO2ESB 4.0.3 and SoapUI 4.0.0

First of all you have to start the ESB and secure the "echo" service as follows

1. Click on the "List" button under "Web Service" menu and Select the "Unsecured" button to Secure the service in front of "echo" service

esb1

2. Now select "yes" from drop down and selected the policy number "5" and click Next

esb2

3. Select the "Trusted key store" and "Private key store" click Finish

esb3

4. You can see the message "Security applied successfully"

esb4

Configuration part in ESB side is finished. What we have to do now is Invoke the secured service through the SoapUI

1. Open the SoapUI and go to "New SoapUI project" and give the service endpoint url with wsdl

ex/ endpoint url - http://localhost:8280/services/echo?wsdl

you can easily take the endpoint url by click on the service

esb5

Place the endpoint url with wsdl and create SoapUI project

so1

2. Click on the created project and select "Show Project View"

so2

3. go to "WS-Security Configurations"

so3

4. Select "Keystores / Certificates"

so4

5. Add new keystore - select the "wso2carbon.jks" that you select to secure the service (you can easily find this here ${ESB_HOME}/repository/resources/security)

so5

so6

so7

6. Set Default Alias as "wso2carbon" and Alias Password as "wso2carbon"

so8

7. Select tab "Incoming WS-Security Configuration"

so9

Add new record name as "incoming-security"

so10

Select Signature keystore as "wso2carbon.jks" and set password as "wso2carbon"

so11

8. Select tab "Outgoing WS-Security Configuration"

so12

Add new record name as "outgoing-security"

so13

so14

Set Alias name as "wso2carbon" and password as "wso2carbon"

so15

9. Add new WS Entry "TimeStamp"

so16

so17

Set value as "300000"

so18

9. Add another WS Entry "Signature"

Keystore : wso2carbon.jks
Alias : wso2carbon
Password : wso2carbon
Key Identifier type : Binary Security Token
Signature Algorithm : http://www.w3.org/2000/09/xmldsig#rsa-sha1
Signature Canonicalization : http://www.w3.org/2001/10/xml-exc-c14n#
Digest Algorithm : sha1
Use Single certificate : true

Parts - Add a new sign part for SOAP body. For that use the following values

ID - [keep it as blank]
Name - Body
Namespace - http://www.w3.org/2003/05/soap-envelope
Encode - Content

so19

9. Add another WS Entry "Encryption"

so20
Keystore : wso2carbon.jks
Alias : wso2carbon
Password : wso2carbon
Key Identifier type : Binary Security Token
Symmetric Encoding Algorithm : <Default>
Key Encryption Algorithm : <Default>
Encryption Canonicalization : <Default>
Create Encrypted Key : true
Parts - Add a new Encryption part

ID - [keep it as blank]
Name - Body
Namespace - http://www.w3.org/2003/05/soap-envelope
Encode - Content

so24

10. Save the SoapUI project and select the one of function under soap12Binding and go to request

Select "Aut" and Set the  "Outgoing WSS" and "Incoming WSS"

so23

11. Invoke the service with the required parameters

so25