- Notifications
You must be signed in to change notification settings - Fork 856
Iam auth #184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Iam auth #184
Changes from 5 commits
19c34f2
7440e19
b9945af
dc25b2c
24e9f34
be6367e
82c595f
6c4e763
8858d91
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
| ||
/* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.*/ | ||
/* | ||
DESCRIPTION | ||
The code sample shows how to use the JDBC driver to establish a connection | ||
to the Autonomous Database (ADB) using database token | ||
issued by the OCI Identity service. | ||
| ||
You need to use either JDBC driver to use | ||
| ||
database token authenticatio. | ||
| ||
Step 1: Enter the DB_URL to pointing to your Autonomous Database (ADB) | ||
Step 2: Make sure to have either 21.4.0.0.1 or 19.13.0.0.1 JDBC driver | ||
in the classpath. | ||
Step 2: Compile and Run the sample JDBCDBTokenSample | ||
| ||
| ||
NOTES | ||
Use JDK 1.7 and above | ||
| ||
MODIFIED (MM/DD/YY) | ||
nbsundar 1/7/21 - Creation | ||
*/ | ||
| ||
import java.io.IOException; | ||
import java.io.InputStream; | ||
import java.sql.Connection; | ||
import java.sql.ResultSet; | ||
import java.sql.SQLException; | ||
import java.sql.Statement; | ||
import java.util.Properties; | ||
| ||
import oracle.jdbc.pool.OracleDataSource; | ||
import oracle.jdbc.OracleConnection; | ||
import java.sql.DatabaseMetaData; | ||
| ||
public class JDBCDBTokenSample { | ||
| ||
//If mutual TLS (mTLS) is enabled then, ADB connection requires wallets. | ||
// Download the wallet zip file and provide the path to the zip file as TNS_ADMIN | ||
// Note that you need to pass the property oracle.jdbc.tokenAuthentication=OCI_TOKEN for token authentication | ||
final static String DB_URL="jdbc:oracle:thin:@dbname_high?TNS_ADMIN=/Users/user/wallet/Wallet_dbname&oracle.jdbc.tokenAuthentication=OCI_TOKEN"; | ||
// If mutla TLS(mTLS) is disabled then, ADB connection does not require wallets. | ||
| ||
// Copy the connection string from "DB Connection" tab from "Connection Strings" section choosing "TLS" in the dropdown | ||
//final static String DB_URL="jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.us-phoenix-1.oraclecloud.com))(connect_data=(service_name=gebqqeredfsozhjbqbs_dbname_medium.adb.oraclecloud.com)))?oracle.jdbc.tokenAuthentication=OCI_TOKEN"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For this example URL, it is using a TNS descriptor format. The descriptor format supports a "TOKEN_AUTH" parameter that has the same effect as the "oracle.jdbc.tokenAuthentication" property. "jdbc:oracle:thin:@(description=" + "(retry_count=20)(retry_delay=3)" + "(address=(protocol=tcps)(port=1521)(host=adb.us-phoenix-1.oraclecloud.com))" + "(security=(token_auth=OCI_TOKEN))" + "(connect_data=(service_name=gebqqeredfsozhjbqbs_dbname_medium.adb.oraclecloud.com)))" Note that I've added in line breaks as well, these will improve the readability of the long form descriptor string. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is good to know, but, I prefer not to use this as customers need to add in the middle of the connection string. It is easy to use EZConnect and pass this additional parameter. We can add it as a comment to show the possibility though. | ||
| ||
| ||
public static void main(String args[]) throws SQLException { | ||
| ||
// For more connection related properties. Refer to | ||
// the OracleConnection interface. | ||
Properties properties = new Properties(); | ||
| ||
properties.put(OracleConnection.CONNECTION_PROPERTY_DEFAULT_ROW_PREFETCH, "20"); | ||
| ||
properties.put(OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES, | ||
"(MD5,SHA1,SHA256,SHA384,SHA512)"); | ||
properties.put(OracleConnection.CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL, | ||
"REQUIRED"); | ||
// Connection property to enable database token authentication. | ||
// properties.put(OracleConnection.CONNECTION_PROPERTY_TOKEN_AUTHENTICATION, "OCI_TOKEN"); | ||
| ||
| ||
OracleDataSource ods = new OracleDataSource(); | ||
ods.setURL(DB_URL); | ||
ods.setConnectionProperties(properties); | ||
| ||
// With AutoCloseable, the connection is closed automatically. | ||
try (OracleConnection connection = (OracleConnection) ods.getConnection()) { | ||
// Get the JDBC driver name and version | ||
DatabaseMetaData dbmd = connection.getMetaData(); | ||
System.out.println("Driver Name: " + dbmd.getDriverName()); | ||
System.out.println("Driver Version: " + dbmd.getDriverVersion()); | ||
// Print some connection properties | ||
System.out.println("Default Row Prefetch Value is: " + | ||
connection.getDefaultRowPrefetch()); | ||
System.out.println("Database Username is: " + connection.getUserName()); | ||
System.out.println(); | ||
// Perform a database operation | ||
printTableNames(connection); | ||
} | ||
} | ||
/* | ||
* Displays 15 table_name from all_tables. | ||
*/ | ||
public static void printTableNames(Connection connection) throws SQLException { | ||
// Statement and ResultSet are AutoCloseable and closed automatically. | ||
try (Statement statement = connection.createStatement()) { | ||
try (ResultSet resultSet = statement | ||
.executeQuery("select table_name from all_tables where rownum < 15")) { | ||
System.out.println("Table name"); | ||
System.out.println("---------------------"); | ||
while (resultSet.next()) | ||
System.out.println(resultSet.getString(1)); | ||
} | ||
} | ||
} | ||
} | ||
| ||
| ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If "database token" is the term we use in our documentation, this is fine. But to me, I think "access token" would be more accurate. It is common to find the term "access token" in literature about token based authentication systems.