-
Notifications
You must be signed in to change notification settings - Fork 500
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for AD federated authentication login sequence (unexported)
- Loading branch information
1 parent
095ece7
commit 5766e2d
Showing
12 changed files
with
984 additions
and
219 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,8 @@ | ||
/.idea | ||
/.connstr | ||
.vscode | ||
.terraform | ||
*.tfstate* | ||
*.log | ||
*.swp | ||
*~ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
package mssql | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
) | ||
|
||
// Federated authentication library affects the login data structure and message sequence. | ||
const ( | ||
// fedAuthLibraryLiveIDCompactToken specifies the Microsoft Live ID Compact Token authentication scheme | ||
fedAuthLibraryLiveIDCompactToken = 0x00 | ||
|
||
// fedAuthLibrarySecurityToken specifies a token-based authentication where the token is available | ||
// without additional information provided during the login sequence. | ||
fedAuthLibrarySecurityToken = 0x01 | ||
|
||
// fedAuthLibraryADAL specifies a token-based authentication where a token is obtained during the | ||
// login sequence using the server SPN and STS URL provided by the server during login. | ||
fedAuthLibraryADAL = 0x02 | ||
|
||
// fedAuthLibraryReserved is used to indicate that no federated authentication scheme applies. | ||
fedAuthLibraryReserved = 0x7F | ||
) | ||
|
||
// Federated authentication ADAL workflow affects the mechanism used to authenticate. | ||
const ( | ||
// fedAuthADALWorkflowPassword uses a username/password to obtain a token from Active Directory | ||
fedAuthADALWorkflowPassword = 0x01 | ||
|
||
// fedAuthADALWorkflowPassword uses the Windows identity to obtain a token from Active Directory | ||
fedAuthADALWorkflowIntegrated = 0x02 | ||
|
||
// fedAuthADALWorkflowMSI uses the managed identity service to obtain a token | ||
fedAuthADALWorkflowMSI = 0x03 | ||
) | ||
|
||
// newSecurityTokenConnector creates a new connector from a DSN and a token provider. | ||
// When invoked, token provider implementations should contact the security token | ||
// service specified and obtain the appropriate token, or return an error | ||
// to indicate why a token is not available. | ||
// The returned connector may be used with sql.OpenDB. | ||
func newSecurityTokenConnector(dsn string, tokenProvider func(ctx context.Context) (string, error)) (*Connector, error) { | ||
if tokenProvider == nil { | ||
return nil, errors.New("mssql: tokenProvider cannot be nil") | ||
} | ||
|
||
conn, err := NewConnector(dsn) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
conn.params.fedAuthLibrary = fedAuthLibrarySecurityToken | ||
conn.securityTokenProvider = tokenProvider | ||
|
||
return conn, nil | ||
} | ||
|
||
// newADALTokenConnector creates a new connector from a DSN and a Active Directory token provider. | ||
// Token provider implementations are called during federated | ||
// authentication login sequences where the server provides a service | ||
// principal name and security token service endpoint that should be used | ||
// to obtain the token. Implementations should contact the security token | ||
// service specified and obtain the appropriate token, or return an error | ||
// to indicate why a token is not available. | ||
// | ||
// The returned connector may be used with sql.OpenDB. | ||
func newActiveDirectoryTokenConnector(dsn string, adalWorkflow byte, tokenProvider func(ctx context.Context, serverSPN, stsURL string) (string, error)) (*Connector, error) { | ||
if tokenProvider == nil { | ||
return nil, errors.New("mssql: tokenProvider cannot be nil") | ||
} | ||
|
||
conn, err := NewConnector(dsn) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
conn.params.fedAuthLibrary = fedAuthLibraryADAL | ||
conn.params.fedAuthADALWorkflow = adalWorkflow | ||
conn.adalTokenProvider = tokenProvider | ||
|
||
return conn, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.