# IAM

> Manage Projects and Access Policies with IAM Service.

## Install Dependency

Package: AffinidiTdk.IamClient

```bash
dotnet add package AffinidiTdk.IamClient
```

Check the latest version on [nuget.org](https://www.nuget.org/packages/AffinidiTdk.IamClient) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk-dotnet/tree/main/src/Clients/IamClient).

## Classes and Methods

### Projects API

Use the Projects API to manage your projects including providing access to other users on your projects.

#### AddPrincipalToProject

Add principal to the project to get access.

Parameters

    addUserToProjectInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/AddUserToProjectInput.md)
    Required
  JSON object to provide the principal ID and principal type to add to the project.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

ProjectsApi api = new ProjectsApi(config);

var principalId = "

";
var principalType = "

";

AddUserToProjectInput input = new AddUserToProjectInput(principalId, principalType);

api.AddPrincipalToProject(input);
```

#### CreateProject

Create a project for your account.

Parameters

    CreateProjectInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/CreateProjectInput.md)
    Required
  JSON object to provide the project name and description.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

ProjectsApi api = new ProjectsApi(config);

var projectName = "

";

CreateProjectInput input = new CreateProjectInput(projectName);

ProjectDto result = api.CreateProject(input);
```

#### DeletePrincipalFromProject

Delete principal (user or PAT) from the project to remove access.

Parameters

    principalId
    String
    Required
  ID of the User or Personal Access Token (PAT).

    principalType
    String
    Required
  Type of the Principal, user for User or token for Personal Access Token.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

// Pass the User Token Auth generated from AuthProvider package
Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

ProjectsApi api = new ProjectsApi(config);

var principalId = "

";
var principalType = "

";

api.DeletePrincipalFromProject(principalId, principalType);
```

#### ListPrincipalsOfProject

Get the list of principals assigned to the project.

No parameters required.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

// Pass the User Token Auth generated from AuthProvider package
Configuration config = new Configuration();
config.AddApiKey("authorization", projectScopedToken);

ProjectsApi api = new ProjectsApi(config);

UserList result = api.ListPrincipalsOfProject();
```

#### ListProject

Get the list of projects.

No parameters required.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

// Pass the User Token Auth generated from AuthProvider package
Configuration config = new Configuration();
config.AddApiKey("authorization", userAccessToken);

ProjectsApi api = new ProjectsApi(config);

ProjectList result = api.ListProject();
```

#### UpdateProject

Update the project details.

Parameters

    projectId
    String
    Required
  ID of the project to update.

    UpdateProjectInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/UpdateProjectInput.md)
    Required
  JSON object to provide the project name and description.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

ProjectsApi api = new ProjectsApi(config);

var projectId = "projectId_example";
var newProjectName = "

";
UpdateProjectInput input = new UpdateProjectInput(newProjectName);

ProjectDto result = api.UpdateProject(projectId, input);
```

### Policies API

Use the Policies API to manage access to your projects and related resources for other users.

#### GetPolicies

Retrieves the policy attached to a principal.

Parameters

    principalId
    String
    Required
  ID of the User or Personal Access Token (PAT).

    principalType
    String
    Required
  Type of the Principal, user for User or token for Personal Access Token.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

PoliciesApi api = new PoliciesApi(config);
var principalId = "

";
var principalType = "

";

PolicyDto result  = api.GetPolicies(principalId, principalType);
```

#### UpdatePolicies

Update the Policy for the principal.

Parameters

    principalId
    String
    Required
  ID of the User or Personal Access Token (PAT).

    principalType
    String
    Required
  Type of the Principal, user for User or token for Personal Access Token.

    policyDto
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/PolicyDto.md)
    Required
  JSON object of Policy rules.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

Configuration config = new Configuration();

config.AddApiKey("authorization", projectScopedToken);

PoliciesApi api = new PoliciesApi(config);
var principalId = "

";
var principalType = "

";
var policyName = "

";
var projectId = "

";

PolicyStatementDto policyData = new PolicyStatementDto();
policyData.Action = [""];
policyData.Effect = "Allow";
policyData.Principal = ["

"];
policyData.Resource = [""];

List

 policyStatement = [policyData];

PolicyDto input = new PolicyDto(name: policyName, principalId: principalId, projectId: projectId, statement: policyStatement);

PolicyDto result = api.UpdatePolicies(principalId, principalType, input);
```

### Secure Token Exchange (STS) API

Use the STS (Secure Token Exchange) API to create a Project Scoped Token and get the current session information.

#### CreateProjectScopedToken

Create a Project Scoped Token to access resources in the project.

Parameters

    CreateProjectScopedTokenInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/CreateProjectScopedTokenInput.md)
    Required
  JSON Object to provide the Project ID to generate the token.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

StsApi api = new StsApi(config);

var projectId = "

";

CreateProjectScopedTokenInput input = new CreateProjectScopedTokenInput(projectId);

CreateProjectScopedTokenOutput result = api.CreateProjectScopedToken(input);
```

#### Whoami

Retrieve the principal information of the current user.

No parameters required.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

StsApi api = new StsApi(config);

WhoamiDto result = api.Whoami();
```

### Tokens API

Use the Tokens API to create a Personal Access Token (PAT) to call Affinidi services on your behalf. Alternatively, use the Token command from Affinidi CLI.

#### CreateToken

Create a Personal Access Token.

Parameters

    CreateTokenInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/CreateTokenInput.md)
    Required
  JSON object to provide the details of the PAT like name and the public key info.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

TokensApi api = new TokensApi(config);

CreateTokenInput input = new CreateTokenInput();

TokenDto result = api.CreateToken(input);
```

#### DeleteToken

Delete a Personal Access Token.

Parameters

    tokenId
    String
    Required
  ID of the Personal Access Token to delete.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";
Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

TokensApi api = new TokensApi(config);

Guid tokenId = new Guid();

api.DeleteToken(tokenId);
```

#### GetToken

Retrieve the Personal Access Token details.

Parameters

    tokenId
    String
    Required
  ID of the Personal Access Token to retrieve.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";
Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

TokensApi api = new TokensApi(config);

Guid tokenId = new Guid();

TokenDto result = api.GetToken(tokenId);
```

#### ListProjectsOfToken

Get the list of principals assigned to the project.

No parameters required.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);
TokensApi api = new TokensApi(config);

Guid tokenId = new Guid();
ProjectWithPolicyList result = api.ListProjectsOfToken(tokenId);
```

#### ListToken

Get the list of Personal Access Token.

No parameters required.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);
TokensApi api = new TokensApi(config);

TokenList result = api.ListToken();
```

#### UpdateToken

Update an existing Personal Access Token.

Parameters

    tokenId
    String
    Required
  ID of the Personal Access Token to update.

    UpdateTokenInput
    [Object](https://github.com/affinidi/affinidi-tdk-dotnet/blob/main/src/Clients/IamClient/docs/UpdateTokenInput.md)
    Required
  JSON object to provide the details to update the Personal Access Token.

Example

```cs
using AffinidiTdk.IamClient.Api;
using AffinidiTdk.IamClient.Client;
using AffinidiTdk.IamClient.Model;

string userAccessToken = "";

Configuration config = new Configuration();

config.AddApiKey("authorization", userAccessToken);

TokensApi api = new TokensApi(config);

Guid tokenId = new Guid();
UpdateTokenInput input = new UpdateTokenInput();

TokenDto result = api.UpdateToken(tokenId, input);
```
