2

요구 사항 - asp.net MVC 응용 프로그램에서 azure SQL DB에 연결하려고하고 azure SQL DB에 대한 연결 유형을 "토큰 기반" 아래는 내 끝에서 준비가 완료된 것입니다. SQL AAD 토큰 기반 인증 - 사용자 'NT AUTHORITY ANONYMOUS LOGON에 대해 로그인하지 못했습니다.

. 인증서 기반 인증을 사용하여 AAD 응용 프로그램 (예 : MTSLocal)을 만들었습니다.

b. SQL에서 위 AAD에 대한 권한을 추가했습니다.

CREATE USER [MTSLocal] FROM external provider;

c.In 코드 단계에서 클라이언트 ID (단계 a에서 가져옴)를 사용하여 액세스 토큰을 얻으려고하고 인증서와 연결하려는 리소스가 "https://database.windows.net"입니다. 샘플 코드 -

string authority = string.Format(System.Globalization.CultureInfo.InvariantCulture, "https://login.windows.net/{0}", 
       "xxxx.onmicrosoft.com"); 
      var authContext = new AuthenticationContext(authority);   
      AuthenticationResult result = null; 
      result = await authContext.AcquireTokenAsync("https://database.windows.net", AssertionCert); 
      token = result.AccessToken; 

d를 참조하십시오. 액세스 토큰을 검색 할 수 있지만 SQL 연결을 열려고 할 때 위와 같은 오류가 발생했습니다.

 sqlBuilder["Data Source"] = serverName; 
     sqlBuilder["Initial Catalog"] = databaseName; 
     sqlBuilder["Connect Timeout"] = 30; 

     string accesstoken = GetAccessToken(); 

     using (SqlConnection connection = new SqlConnection(sqlBuilder.ConnectionString)) 
     { 
      try 
      { 
       connection.AccessToken = accesstoken; 
       connection.Open(); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

이 문제에 도움이된다면 도움이 될 것입니다.

+0

일부 코드 및 기타 정보를 보지 않고도 누구나 쉽게 의미있는 대답을 할 수 있습니다. 귀하의 질문에 무엇을 넣을 지에 대한 안내는 https://stackoverflow.com/help/how-to-ask를 참조하십시오. – ADyson

+0

그 .. 죄송합니다. - https://stackoverflow.com/questions/38862095/acquiring-azure-ad-token-for-azure-sql-server에서 코드 샘플을 사용했습니다. 하지만 connection.open() 줄 내가 위에서 말한 예외의 코드는 예외이다. connection.AccessToken = accessToken; // 액세스 토큰을 성공적으로 가져올 수 있습니다. connection.Open(); –

+0

아키텍처를보다 구체적으로 설명하십시오. 클라이언트, Azure DC, SQL 서버 및 모든 웹 서버 또는 SQL 서버 앞에있을 수있는 다른 유형의 응용 프로그램 서버. –

답변

-1

AAD에 등록 된 응용 프로그램은 DB의 사용자 목록에 추가되어야하며 각각의 역할은 DB 사용자에게 제공되어야합니다.

등록 된 App의 이름이 "App_AAD_Register_Name"이라고 가정합니다. 아래 쿼리를 실행하는 것과 같이이 사용자를 해당 DB에 추가하십시오. 이것으로 사용자는 DB 서버의 주 사용자 목록에 추가됩니다.

CREATE USER [App_AAD_Register_Name] from EXTERNAL PROVIDER.

가 [RoleUser] [RoleUser] TO SCHEMA :: dbo가 ON GRANT의 INSERT 갈 역할이 [RoleUser] GRANT SELECT ON SCHEMA :: DBO를 GO 만들려면 다음과 같은 몇 가지 일반적인 역할 만들기

를 GO

역할이 만들어지고 각 권한이 부여되면 첫 번째 단계에서 만든 사용자에게 역할을 할당하십시오.

EXEC sp_addrolemember N'RoleUser ', N'App_AAD_Register_Name'.

이 모든 단계를 완료하면 토큰을 사용하여 DB에 연결할 수 있습니다.

다음 단계는 저에게 효과적입니다.

관련 문제