# IAM

> Manage Projects and Access Policies with IAM Service.

## Install Dependency

Package: pkg:maven/com.affinidi.tdk/iam.client

```xml

    com.affinidi.tdk
    iam.client

```

Check the latest version on the [Maven Central repository](https://central.sonatype.com/artifact/com.affinidi.tdk/iam.client) or view the source on [GitHub](https://github.com/affinidi/affinidi-tdk/tree/main/clients/java/iam.client).

## Classes and Methods

### Projects API

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

#### addPrincipalToProject

Adds a principal to the project to grant access.

Parameters

    addUserToProjectInput
    [AddUserToProjectInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/AddUserToProjectInput.md)
    Required
  Principal ID and principal type (user or token) to add to the project.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.AddUserToProjectInput;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);

    AddUserToProjectInput requestInput = new AddUserToProjectInput()
        .principalId("

")
        .principalType("token");

    apiInstance.addPrincipalToProject(requestInput);
} catch (Exception e) {
    e.printStackTrace();
}
```

#### createProject

Creates a project for your account.

Parameters

    createProjectInput
    [CreateProjectInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/CreateProjectInput.md)
    Required
  Project name and description.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.CreateProjectInput;
import com.affinidi.tdk.iam.client.models.ProjectDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);

    CreateProjectInput requestInput = new CreateProjectInput()
        .name("project_name")
        .description("project_description");

    ProjectDto response = apiInstance.createProject(requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### deletePrincipalFromProject

Removes a principal (user or PAT) from the project.

Parameters

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

    principalType
    String
    Required
  Type of the principal: user for a user or token for a PAT.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);
    apiInstance.deletePrincipalFromProject("

", "token");
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listPrincipalsOfProject

Returns the list of principals assigned to the project.

No parameters required.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.UserList;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);
    UserList response = apiInstance.listPrincipalsOfProject(100, null);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listProject

Returns the list of projects for the account.

No parameters required.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.ProjectList;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);
    ProjectList response = apiInstance.listProject(10, null);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateProject

Updates the project details.

Parameters

    projectId
    String
    Required
  ID of the project to update.

    updateProjectInput
    [UpdateProjectInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/UpdateProjectInput.md)
    Required
  Updated project name and description.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.ProjectsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.ProjectDto;
import com.affinidi.tdk.iam.client.models.UpdateProjectInput;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    ProjectsApi apiInstance = new ProjectsApi(defaultClient);

    UpdateProjectInput requestInput = new UpdateProjectInput()
        .name("Project Name")
        .description("Project Description");

    ProjectDto response = apiInstance.updateProject("

", requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### 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 a user or token for a PAT.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.PoliciesApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.PolicyDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    PoliciesApi apiInstance = new PoliciesApi(defaultClient);
    PolicyDto response = apiInstance.getPolicies("

", "token");
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updatePolicies

Updates the policy for a principal.

Parameters

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

    principalType
    String
    Required
  Type of the principal: user for a user or token for a PAT.

    policyDto
    [PolicyDto](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/PolicyDto.md)
    Required
  Policy rules with version and statement array.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.PoliciesApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.PolicyDto;
import com.affinidi.tdk.iam.client.models.PolicyStatementDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    PoliciesApi apiInstance = new PoliciesApi(defaultClient);

    PolicyDto policyDto = new PolicyDto()
        .version("2022-12-15")
        .statement(new ArrayList<>(List.of(
            new PolicyStatementDto()
                .action(List.of("*"))
                .principal(List.of("

"))
                .resource(List.of("*"))
                .effect("Allow")
        )));

    PolicyDto response = apiInstance.updatePolicies("

", "token", policyDto);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### 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

Creates a project-scoped token to access resources in the project.

Parameters

    createProjectScopedTokenInput
    [CreateProjectScopedTokenInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/CreateProjectScopedTokenInput.md)
    Required
  Project ID for which to generate the token.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.StsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.CreateProjectScopedTokenInput;
import com.affinidi.tdk.iam.client.models.CreateProjectScopedTokenOutput;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    StsApi apiInstance = new StsApi(defaultClient);

    CreateProjectScopedTokenInput requestInput = new CreateProjectScopedTokenInput()
        .projectId("

");

    CreateProjectScopedTokenOutput response = apiInstance.createProjectScopedToken(requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### whoami

Retrieves the principal information of the current user.

No parameters required.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.StsApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.WhoamiDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    StsApi apiInstance = new StsApi(defaultClient);
    WhoamiDto response = apiInstance.whoami();
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

### 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

Creates a Personal Access Token.

Parameters

    createTokenInput
    [CreateTokenInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/CreateTokenInput.md)
    Required
  PAT name, authentication method type, signing algorithm, and public key information.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.TokensApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.CreateTokenInput;
import com.affinidi.tdk.iam.client.models.TokenAuthenticationMethodDto;
import com.affinidi.tdk.iam.client.models.TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo;
import com.affinidi.tdk.iam.client.models.TokenAuthenticationMethodDto.SigningAlgorithmEnum;
import com.affinidi.tdk.iam.client.models.TokenAuthenticationMethodDto.TypeEnum;
import com.affinidi.tdk.iam.client.models.TokenDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    TokensApi apiInstance = new TokensApi(defaultClient);

    CreateTokenInput requestInput = new CreateTokenInput()
        .name("token_name")
        .authenticationMethod(new TokenAuthenticationMethodDto()
            .type(TypeEnum.PRIVATE_KEY)
            .signingAlgorithm(SigningAlgorithmEnum.RS256)
            .publicKeyInfo(new TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo()));

    TokenDto response = apiInstance.createToken(requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### deleteToken

Deletes a Personal Access Token.

Parameters

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

Example

```java
import java.util.UUID;
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.TokensApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    TokensApi apiInstance = new TokensApi(defaultClient);
    apiInstance.deleteToken(UUID.fromString(""));
} catch (Exception e) {
    e.printStackTrace();
}
```

#### getToken

Retrieves the Personal Access Token details.

Parameters

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

Example

```java
import java.util.UUID;
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.TokensApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.TokenDto;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    TokensApi apiInstance = new TokensApi(defaultClient);
    TokenDto response = apiInstance.getToken(UUID.fromString(""));
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### listToken

Returns the list of Personal Access Tokens.

No parameters required.

Example

```java
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.TokensApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.TokenList;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    TokensApi apiInstance = new TokensApi(defaultClient);
    TokenList response = apiInstance.listToken(10, null);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```

#### updateToken

Updates an existing Personal Access Token.

Parameters

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

    updateTokenInput
    [UpdateTokenInput](https://github.com/affinidi/affinidi-tdk/blob/main/clients/java/iam.client/docs/UpdateTokenInput.md)
    Required
  Updated PAT name and authentication method.

Example

```java
import java.util.UUID;
import com.affinidi.tdk.iam.client.ApiClient;
import com.affinidi.tdk.iam.client.Configuration;
import com.affinidi.tdk.iam.client.apis.TokensApi;
import com.affinidi.tdk.iam.client.auth.ApiKeyAuth;
import com.affinidi.tdk.iam.client.models.TokenDto;
import com.affinidi.tdk.iam.client.models.TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo;
import com.affinidi.tdk.iam.client.models.UpdateTokenInput;
import com.affinidi.tdk.iam.client.models.UpdateTokenPrivateKeyAuthenticationMethodDto;
import com.affinidi.tdk.iam.client.models.UpdateTokenPrivateKeyAuthenticationMethodDto.SigningAlgorithmEnum;
import com.affinidi.tdk.iam.client.models.UpdateTokenPrivateKeyAuthenticationMethodDto.TypeEnum;

try {
    ApiClient defaultClient = Configuration.getDefaultApiClient();
    ApiKeyAuth ProjectTokenAuth = (ApiKeyAuth) defaultClient.getAuthentication("ProjectTokenAuth");
    ProjectTokenAuth.setApiKey(authProvider.fetchProjectScopedToken());

    TokensApi apiInstance = new TokensApi(defaultClient);

    UpdateTokenInput requestInput = new UpdateTokenInput()
        .name("")
        .authenticationMethod(new UpdateTokenPrivateKeyAuthenticationMethodDto()
            .type(TypeEnum.PRIVATE_KEY)
            .signingAlgorithm(SigningAlgorithmEnum.RS256)
            .publicKeyInfo(new TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo()));

    TokenDto response = apiInstance.updateToken(UUID.fromString(""), requestInput);
    System.out.println(response.toString());
} catch (Exception e) {
    e.printStackTrace();
}
```
