mirror of
https://github.com/azure/login.git
synced 2026-03-15 09:20:56 -04:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f63701bf3 | ||
|
|
94c2e154e6 | ||
|
|
66d2e78565 | ||
|
|
838596bf46 | ||
|
|
4157c80c0a | ||
|
|
193e371fe1 | ||
|
|
0c79dfa0e1 |
28
README.md
28
README.md
@@ -95,7 +95,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Az CLI login'
|
- name: 'Az CLI login'
|
||||||
uses: azure/login@v1.4.1
|
uses: azure/login@v1
|
||||||
with:
|
with:
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -126,7 +126,7 @@ jobs:
|
|||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- name: OIDC Login to Azure Public Cloud with AzPowershell (enableAzPSSession true)
|
- name: OIDC Login to Azure Public Cloud with AzPowershell (enableAzPSSession true)
|
||||||
uses: azure/login@v1.4.1
|
uses: azure/login@v1
|
||||||
with:
|
with:
|
||||||
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||||
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||||
@@ -226,13 +226,15 @@ Follow the steps to configure Azure Service Principal with a secret:
|
|||||||
You can add federated credentials in the Azure portal or with the Microsoft Graph REST API.
|
You can add federated credentials in the Azure portal or with the Microsoft Graph REST API.
|
||||||
|
|
||||||
#### Azure portal
|
#### Azure portal
|
||||||
1. Go to **Certificates and secrets**. In the **Federated credentials** tab, select **Add credential**.
|
1. [Register an application](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app) in Azure Portal
|
||||||
1. The **Add a credential** blade opens.
|
2. Within the registered application, Go to **Certificates & secrets**.
|
||||||
1. In the **Federated credential scenario** box select **GitHub actions deploying Azure resources**.
|
3. In the **Federated credentials** tab, select **Add credential**.
|
||||||
1. Specify the **Organization** and **Repository** for your GitHub Actions workflow which needs to access the Azure resources scoped by this App (Service Principal)
|
4. The **Add a credential** blade opens.
|
||||||
1. For **Entity type**, select **Environment**, **Branch**, **Pull request**, or **Tag** and specify the value, based on how you have configured the trigger for your GitHub workflow. For a more detailed overview, see [GitHub OIDC guidance]( https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#defining-[…]dc-claims).
|
5. In the **Federated credential scenario** box select **GitHub actions deploying Azure resources**.
|
||||||
1. Add a **Name** for the federated credential.
|
6. Specify the **Organization** and **Repository** for your GitHub Actions workflow which needs to access the Azure resources scoped by this App (Service Principal)
|
||||||
1. Click **Add** to configure the federated credential.
|
7. For **Entity type**, select **Environment**, **Branch**, **Pull request**, or **Tag** and specify the value, based on how you have configured the trigger for your GitHub workflow. For a more detailed overview, see [GitHub OIDC guidance]( https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#defining-[…]dc-claims).
|
||||||
|
8. Add a **Name** for the federated credential.
|
||||||
|
9. Click **Add** to configure the federated credential.
|
||||||
|
|
||||||
For a more detailed overview, see more guidance around [Azure Federated Credentials](https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation-create-trust-github).
|
For a more detailed overview, see more guidance around [Azure Federated Credentials](https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation-create-trust-github).
|
||||||
|
|
||||||
@@ -244,19 +246,19 @@ For a more detailed overview, see more guidance around [Azure Federated Credenti
|
|||||||
Run the following command to [create a new federated identity credential](https://docs.microsoft.com/en-us/graph/api/application-post-federatedidentitycredentials?view=graph-rest-beta&preserve-view=true) on your app (specified by the object ID of the app). Substitute the values `APPLICATION-OBJECT-ID`, `CREDENTIAL-NAME`, `SUBJECT`. The options for subject refer to your request filter. These are the conditions that OpenID Connect uses to determine when to issue an authentication token.
|
Run the following command to [create a new federated identity credential](https://docs.microsoft.com/en-us/graph/api/application-post-federatedidentitycredentials?view=graph-rest-beta&preserve-view=true) on your app (specified by the object ID of the app). Substitute the values `APPLICATION-OBJECT-ID`, `CREDENTIAL-NAME`, `SUBJECT`. The options for subject refer to your request filter. These are the conditions that OpenID Connect uses to determine when to issue an authentication token.
|
||||||
* specific environment
|
* specific environment
|
||||||
```azurecli
|
```azurecli
|
||||||
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com/","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
||||||
```
|
```
|
||||||
* pull_request events
|
* pull_request events
|
||||||
```azurecli
|
```azurecli
|
||||||
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com/","subject":"repo:octo-org/octo-repo:pull-request","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:pull_request","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
||||||
```
|
```
|
||||||
* specific branch
|
* specific branch
|
||||||
```azurecli
|
```azurecli
|
||||||
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com/","subject":"repo:octo-org/octo-repo:ref:refs/heads/{Branch}","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:ref:refs/heads/{Branch}","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
||||||
```
|
```
|
||||||
* specific tag
|
* specific tag
|
||||||
```azurecli
|
```azurecli
|
||||||
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com/","subject":"repo:octo-org/octo-repo:ref:refs/heads/{Tag}","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
az rest --method POST --uri 'https://graph.microsoft.com/beta/applications/<APPLICATION-OBJECT-ID>/federatedIdentityCredentials' --body '{"name":"<CREDENTIAL-NAME>","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:ref:refs/heads/{Tag}","description":"Testing","audiences":["api://AzureADTokenExchange"]}'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Support for using `allow-no-subscriptions` flag with az login
|
## Support for using `allow-no-subscriptions` flag with az login
|
||||||
|
|||||||
24
lib/main.js
24
lib/main.js
@@ -1,14 +1,14 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function (o, m, k, k2) {
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
if (k2 === undefined) k2 = k;
|
if (k2 === undefined) k2 = k;
|
||||||
Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
}) : (function (o, m, k, k2) {
|
}) : (function(o, m, k, k2) {
|
||||||
if (k2 === undefined) k2 = k;
|
if (k2 === undefined) k2 = k;
|
||||||
o[k2] = m[k];
|
o[k2] = m[k];
|
||||||
}));
|
}));
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function (o, v) {
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
}) : function (o, v) {
|
}) : function(o, v) {
|
||||||
o["default"] = v;
|
o["default"] = v;
|
||||||
});
|
});
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
@@ -140,6 +140,8 @@ function main() {
|
|||||||
if (!!federatedToken) {
|
if (!!federatedToken) {
|
||||||
if (environment != "azurecloud")
|
if (environment != "azurecloud")
|
||||||
throw new Error(`Your current environment - "${environment}" is not supported for OIDC login.`);
|
throw new Error(`Your current environment - "${environment}" is not supported for OIDC login.`);
|
||||||
|
let [issuer, subjectClaim] = yield jwtParser(federatedToken);
|
||||||
|
console.log("Federated token details: \n issuer - " + issuer + " \n subject claim - " + subjectClaim);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new Error("Could not get ID token for authentication.");
|
throw new Error("Could not get ID token for authentication.");
|
||||||
@@ -211,10 +213,10 @@ function main() {
|
|||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
if (!isAzCLISuccess) {
|
if (!isAzCLISuccess) {
|
||||||
core.setFailed("Az CLI Login failed. Please check the credentials. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows");
|
core.setFailed("Az CLI Login failed. Please check the credentials and make sure az is installed on the runner. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.setFailed(`Azure PowerShell Login failed. Please check the credentials. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows"`);
|
core.setFailed(`Azure PowerShell Login failed. Please check the credentials and make sure az is installed on the runner. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows"`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
@@ -230,4 +232,12 @@ function executeAzCliCommand(command, silent, execOptions = {}, args = []) {
|
|||||||
yield exec.exec(`"${azPath}" ${command}`, args, execOptions);
|
yield exec.exec(`"${azPath}" ${command}`, args, execOptions);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function jwtParser(federatedToken) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
let tokenPayload = federatedToken.split('.')[1];
|
||||||
|
let bufferObj = Buffer.from(tokenPayload, "base64");
|
||||||
|
let decodedPayload = JSON.parse(bufferObj.toString("utf8"));
|
||||||
|
return [decodedPayload['iss'], decodedPayload['sub']];
|
||||||
|
});
|
||||||
|
}
|
||||||
main();
|
main();
|
||||||
|
|||||||
12
src/main.ts
12
src/main.ts
@@ -118,6 +118,8 @@ async function main() {
|
|||||||
if (!!federatedToken) {
|
if (!!federatedToken) {
|
||||||
if (environment != "azurecloud")
|
if (environment != "azurecloud")
|
||||||
throw new Error(`Your current environment - "${environment}" is not supported for OIDC login.`);
|
throw new Error(`Your current environment - "${environment}" is not supported for OIDC login.`);
|
||||||
|
let [issuer, subjectClaim] = await jwtParser(federatedToken);
|
||||||
|
console.log("Federated token details: \n issuer - " + issuer + " \n subject claim - " + subjectClaim);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new Error("Could not get ID token for authentication.");
|
throw new Error("Could not get ID token for authentication.");
|
||||||
@@ -206,10 +208,10 @@ async function main() {
|
|||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
if (!isAzCLISuccess) {
|
if (!isAzCLISuccess) {
|
||||||
core.setFailed("Az CLI Login failed. Please check the credentials. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows");
|
core.setFailed("Az CLI Login failed. Please check the credentials and make sure az is installed on the runner. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.setFailed(`Azure PowerShell Login failed. Please check the credentials. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows"`);
|
core.setFailed(`Azure PowerShell Login failed. Please check the credentials and make sure az is installed on the runner. For more information refer https://aka.ms/create-secrets-for-GitHub-workflows"`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
@@ -227,4 +229,10 @@ async function executeAzCliCommand(
|
|||||||
execOptions.silent = !!silent;
|
execOptions.silent = !!silent;
|
||||||
await exec.exec(`"${azPath}" ${command}`, args, execOptions);
|
await exec.exec(`"${azPath}" ${command}`, args, execOptions);
|
||||||
}
|
}
|
||||||
|
async function jwtParser(federatedToken: string) {
|
||||||
|
let tokenPayload = federatedToken.split('.')[1];
|
||||||
|
let bufferObj = Buffer.from(tokenPayload, "base64");
|
||||||
|
let decodedPayload = JSON.parse(bufferObj.toString("utf8"));
|
||||||
|
return [decodedPayload['iss'], decodedPayload['sub']];
|
||||||
|
}
|
||||||
main();
|
main();
|
||||||
|
|||||||
Reference in New Issue
Block a user