IAM

Manage Projects and Access Policies with IAM Service.

Install Dependency

Package: affinidi_tdk_iam_client

  dart pub add affinidi_tdk_iam

Check the latest version on pub.dev or view the source on GitHub.

Classes and Methods

Projects API

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

addPrincipalToProject

Add a principal to the project to get access.

Parameters

addUserToProjectInput AddUserToProjectInput Required
Principal ID and principal type to add to the project.

Example

import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';
import 'package:dio/dio.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(BaseOptions(
      baseUrl: AffinidiTdkIamClient.basePath,
      connectTimeout: const Duration(seconds: 5),
      receiveTimeout: const Duration(seconds: 5),
    ));
    final apiClient = AffinidiTdkIamClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);
    projectsApi = apiClient.getProjectsApi();

    final addUserToProjectInput = AddUserToProjectInputBuilder()
      ..principalId = "<PAT_ID>"
      ..principalType = "token";

    final response = (await projectsApi.addPrincipalToProject(
        addUserToProjectInput: addUserToProjectInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

createProject

Create a project for your account.

Parameters

createProjectInput CreateProjectInput Required
Project name and description.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    projectsApi = apiClient.getProjectsApi();

    final createProjectInput =
        CreateProjectInputBuilder()
          ..name = "Project Name"
          ..description = "Project Description";
    final response = (await projectsApi.createProject(
      createProjectInput: createProjectInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

deletePrincipalFromProject

Delete a 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, token for Personal Access Token.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    projectsApi = apiClient.getProjectsApi();

    final principalId = "<PAT_ID>";
    final principalType = "token";

    final response = (await projectsApi.deletePrincipalFromProject(
      principalId: principaId,
      principalType: principalType,
      ));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

listPrincipalsOfProject

Get the list of principals assigned to the project.

Parameters

limit Integer Optional
Maximum number of principals to return.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    projectsApi = apiClient.getProjectsApi();
    
    final int limit = 100;

    final response = (await projectsApi.listPrincipalsOfProject(
      limit : limit
    ));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

listProject

Get the list of projects.

Parameters

limit Integer Optional
Maximum number of projects to return.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    projectsApi = apiClient.getProjectsApi();
    
    final int limit = 100;

    final response = (await projectsApi.listProject(
      limit : limit
    ));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

updateProject

Update the project details.

Parameters

projectId String Required
ID of the project to update.
updateProjectInput UpdateProjectInput Required
Project name and description to update.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late ProjectsApi projectsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    projectsApi = apiClient.getProjectsApi();

    final updateProjectInput = UpdateProjectInputBuilder()
      ..name = "project_name"
      ..description = "project_description";

    final projectID = "<PROJECT_ID>";

    final response = (await projectsApi.updateProject(projectId: projectID, updateProjectInput:  updateProjectInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

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, token for Personal Access Token.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late PoliciesApi policiesApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    policiesApi = apiClient.getPoliciesApi();

    final principalId = "<PAT_ID>";
    final principalType = "token";

    final response = (await policiesApi.getPolicies(
      principalId: principalId,
      principalType: principalType,
    ));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

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, token for Personal Access Token.
policyDto PolicyDto Required
Policy rules to apply.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late PoliciesApi policiesApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    policiesApi = apiClient.getPoliciesApi();

    final policyDto =
        PolicyDtoBuilder()
          ..version = '2022-12-15'
          ..statement = ListBuilder<PolicyStatementDto>([
            (PolicyStatementDtoBuilder()
                  ..action = ListBuilder<String>([''])
                  ..effect = 'Allow'
                  ..principal = ListBuilder<String>(['principals'])
                  ..resource = ListBuilder<String>(['resources']))
                .build(),
          ]);

    final principalId = "<PAT_ID>";
    final principalType = "token";

    final response =
        (await policiesApi.updatePolicies(
          principalId: principalId,
          principalType: principalType,
          policyDto: policyDto.build(),
        )).data;

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

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 CreateProjectScopedTokenInput Required
Project ID to generate the token for.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late StsApi stsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    stsApi = apiClient.getStsApi();

    final createProjectScopedTokenInput =
        CreateProjectScopedTokenInputBuilder()..projectId = "<PROJECT_ID>";

    final response =
        (await stsApi.createProjectScopedToken(
          createProjectScopedTokenInput: createProjectScopedTokenInput.build(),
        )).data;

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

whoami

Retrieve the principal information of the current user.

No parameters required.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late StsApi stsApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    stsApi = apiClient.getStsApi();

    final response =
        (await stsApi.whoami());

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

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 CreateTokenInput Required
Details of the PAT including name and public key info.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late TokensApi tokensApi;

    final dio = Dio(
      BaseOptions(
        baseUrl: AffinidiTdkIamClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
      ),
    );
    final apiClient = AffinidiTdkIamClient(
      dio: dio,
      authTokenHook: authProvider.fetchProjectScopedToken,
    );
    tokensApi = apiClient.getTokensApi();

    final createTokenInput = CreateTokenInputBuilder()
      ..name = "token_name";

    final response = (await tokensApi.createToken(createTokenInput: createTokenInput.build())).data; 
    print(response);
  } catch (e) {
    print('Exception: $e');
  }

deleteToken

Delete a Personal Access Token.

Parameters

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

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late TokensApi tokensApi;

    final dio = Dio(BaseOptions(
      baseUrl: AffinidiTdkIamClient.basePath,
      connectTimeout: const Duration(seconds: 5),
      receiveTimeout: const Duration(seconds: 5),
    ));
    final apiClient = AffinidiTdkIamClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);
    tokensApi = apiClient.getTokensApi();

    final tokenId = "<TOKEN_ID>";

    final response = (await tokensApi.deleteToken(tokenId: tokenId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

getToken

Retrieve the Personal Access Token details.

Parameters

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

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late TokensApi tokensApi;

    final dio = Dio(BaseOptions(
      baseUrl: AffinidiTdkIamClient.basePath,
      connectTimeout: const Duration(seconds: 5),
      receiveTimeout: const Duration(seconds: 5),
    ));
    final apiClient = AffinidiTdkIamClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);
    tokensApi = apiClient.getTokensApi();

    final tokenId = "<TOKEN_ID>";

    final response = (await tokensApi.getToken(tokenId: tokenId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

listToken

Get the list of Personal Access Tokens.

Parameters

limit Integer Optional
Maximum number of tokens to return.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late TokensApi tokensApi;

    final dio = Dio(BaseOptions(
      baseUrl: AffinidiTdkIamClient.basePath,
      connectTimeout: const Duration(seconds: 5),
      receiveTimeout: const Duration(seconds: 5),
    ));
    final apiClient = AffinidiTdkIamClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);
    tokensApi = apiClient.getTokensApi();

    final limit = 10;
    
    final response = (await tokensApi.listToken(limit: limit));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

updateToken

Update an existing Personal Access Token.

Parameters

tokenId String Required
ID of the Personal Access Token to update.
updateTokenInput UpdateTokenInput Required
Details to update in the Personal Access Token.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iam_client/affinidi_tdk_iam_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    late TokensApi tokensApi;

    final dio = Dio(BaseOptions(
      baseUrl: AffinidiTdkIamClient.basePath,
      connectTimeout: const Duration(seconds: 5),
      receiveTimeout: const Duration(seconds: 5),
    ));
    final apiClient = AffinidiTdkIamClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);
    tokensApi = apiClient.getTokensApi();

    final tokenId = "<TOKEN_ID>";

    final updateTokenInput = UpdateTokenInputBuilder()
      ..name = "token_name";
    
    final response = (await tokensApi.updateToken(tokenId: tokenId , updateTokenInput: updateTokenInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }