Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9d11aad

Browse files
authored
Create azure-ad-sso-service-principal.cs (#333)
1 parent 35d96b8 commit 9d11aad

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//This application demonstrates connecting .NET to Oracle database using Microsoft Entra ID/Azure Active
2+
// Directory single sign-on (SSO). It uses service principal authentication with either managed ODP.NET or
3+
// ODP.NET Core 23c or higher.
4+
5+
// ODP.NET Azure AD SSO requires Oracle.ManagedDataAccess.Azure package from NuGet Gallery
6+
using Oracle.ManagedDataAccess.Azure;
7+
using Oracle.ManagedDataAccess.Client;
8+
using System.Security;
9+
10+
//Set your Azure Active Directory parameters below and ODP.NET data source value
11+
string clientId = "<AZURE AD APP REGISTRATION CLIENT ID>";
12+
string tenantId = "<AZURE AD TENANT ID>";
13+
string clientSecret = "<AZURE AD APP REGISTRATION SECRET VALUE>";
14+
string dbAppIdUri = "<AZURE AD PROTECTED RESOURCE ID>";
15+
var conn = new OracleConnection("User Id=/;Data Source=<DATA SOURCE>;Connection Timeout=900;");
16+
17+
var secureSecret = new SecureString();
18+
foreach (char c in clientSecret)
19+
{
20+
secureSecret.AppendChar(c);
21+
}
22+
secureSecret.MakeReadOnly();
23+
24+
//Create Azure authentication token object and set its values.
25+
var tokenConfig = new AzureTokenAuthentication
26+
{
27+
ClientId = clientId,
28+
TenantId = tenantId,
29+
ClientSecret = secureSecret,
30+
DatabaseApplicationIdUri = dbAppIdUri,
31+
};
32+
33+
//Set token authentication mode to Azure Service Principal and use Azure token authentication
34+
conn.TokenAuthentication = OracleTokenAuth.AzureServicePrincipal;
35+
conn.UseAzureTokenAuthentication(tokenConfig);
36+
37+
try
38+
{
39+
conn.Open();
40+
Console.WriteLine("Connection opened successfully!");
41+
using (OracleCommand cmd = conn.CreateCommand())
42+
{
43+
//Retrieve authenticated identity value from database
44+
cmd.CommandText = "SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY') FROM DUAL";
45+
Console.WriteLine($"Authenticated identity: {cmd.ExecuteScalar().ToString()}");
46+
}
47+
}
48+
catch (Exception ex)
49+
{
50+
Console.WriteLine("Error: " + ex.Message);
51+
}
52+
conn.Dispose();
53+
54+
/* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. */
55+
56+
/******************************************************************************
57+
*
58+
* You may not use the identified files except in compliance with The MIT
59+
* License (the "License.")
60+
*
61+
* You may obtain a copy of the License at
62+
* https://github.com/oracle/dotnet-db-samples/blob/master/LICENSE.txt
63+
*
64+
* Unless required by applicable law or agreed to in writing, software
65+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
66+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
67+
*
68+
* See the License for the specific language governing permissions and
69+
* limitations under the License.
70+
*
71+
*****************************************************************************/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /