DEV Community

Cover image for How to use GitHub Personal Access Tokens Securely
CiCube for CICube

Posted on • Originally published at cicube.io

How to use GitHub Personal Access Tokens Securely


cicube.io

Introduction

GitHub personal access tokens are powerful options instead of passwords; this is especially true for interactions via API and command-line operations. The article will go on to see what types of personal access tokens are available, how one can create them, and how one can use them successfully. We'll look at some best practices to maintain security with your tokens so you can confidently work while protecting your valuable resource.

Understanding Personal Access Tokens

Personal access tokens are a more secure way than passwords, especially when your interaction with GitHub involves API calls or some other command-line operation. There are mainly two varieties: the fine-grained personal access tokens and the classic ones. Fine-grained tokens are recommended; these indeed give further detail in permission and power of access to resources. They can also be tailored for specific repositories to only require the lowest level of privilege, which gives lessened security risk.

On the other hand, classic tokens are still usable but provide the wider access and lack the granularity that fine-grained tokens offer. For instance, if I am to create a fine-grained access token and I choose just one repository, the token will not work against any other resource. When creating these tokens, I should always consider the scopes brought up carefully. Scopes define what the token can do, so I need to select just what I need.

I'll create one now by going into my GitHub settings, then into Developer settings, and then into Personal access tokens. From there, I can opt to create a fine-grained token, fill in the details of said token, and specify the permissions. With this clear process, I know I will have an easy-to-handle and secure token that precisely suits my needs.

With fine-grained personal access tokens, you can have fine-grained access control to only the resources you specify. First, you need to confirm your e-mail address. Then, in your profile settings on GitHub, click Settings, then Developer settings. In the Personal access tokens section, click Fine-grained tokens, then Generate new token.

When creating the token, you will be asked to give it a name and an expiry date. Make sure to grant the repository access with the minimum setting that suits your needs. For example, in case of accessing only one central repository, choose 'Only select repositories' and add which all repository this token will have access to. In Permissions, choose the least required permissions for your services to run successfully.

Click Generate token after the items have been selected. Those requiring an organizational approval will be marked pending until reviewed.

You can manage your tokens effectively using the terminal. For cloning a particular repository, for example, you will execute the following command:

git clone https://github.com/YOUR-USERNAME/YOUR-REPO.git
Username: YOUR-USERNAME
Password: YOUR-PERSONAL-ACCESS-TOKEN
Enter fullscreen mode Exit fullscreen mode

This process ensures clarity and security when operating with your access tokens.

Even though classic personal access tokens have less granular permissions, they are still very necessary for many established workflows. The first step to create a token, if I haven't already done it, is to confirm my email address. On GitHub, under my profile, by clicking on the top right profile photo and selecting Settings, I get to. Then, in the Settings menu, I click on Developer settings and then on Personal access tokens. There, I create a new classic token by clicking 'Generate new token', then 'Generate new token (classic)'.

Within the Note field, I am naming this token descriptively. It is also a good practice to give it an expiration date once the need for the token has expired, or to help add extra security to it. What scope I choose depends on how I am planning on using it. Often, this will be repo, as that allows the token access to the repositories. Fill those out, then click 'Generate token'.

With this token, I would use the following command to clone a repository:

git clone https://github.com/YOUR-USERNAME/YOUR-REPO.git
Enter fullscreen mode Exit fullscreen mode

This will prompt for a password; I would then insert my personal access token. While classic tokens are less secure than fine-grained tokens, they generally retain important significance in functionalities that require wider access.

Where access tokens are significant to create, it is equally significant to delete them when they are no longer needed. Token life cycle management provides a way to ensure that deleted tokens not in use don't expose programs to any risk. First of all, I open the GitHub website and confirm my email address if requested. Then, I click on my profile photo in the upper right-hand corner, and go to Settings:. On the left-hand sidebar, I click on Developer settings and the Personal access tokens. That brings me to a listing of all of my valid tokens, so I can tell which ones are no longer current or which are no longer in service. If I happen upon a token that is unique and I no longer need it, then I can delete it by clicking Delete option beside it. These are basic security best practices that prevent unauthorized access: regular reviews and audits of API keys and tokens. This helps keep my GitHub account secure.

This chapter covers the practical use of personal access tokens within a command-line environment. I will be talking about how to securely use the created tokens for all Git operations over HTTPS, sharing commands and examples continuously to describe it.

To use a personal access token on the command line, I can substitute my password for the token. For example, to clone a repository, I would run the following command:

git clone https://github.com/USER/YOUR-REPO.git
Enter fullscreen mode Exit fullscreen mode

Upon executing this command, I am prompted to enter my username and then my password, where I will input my personal access token instead.


Monitoring GitHub Actions Workflows

CICube is a GitHub Actions monitoring tool that provides you with detailed insights into your workflows to further optimize your CI/CD pipeline. With CICube, you will be able to track your workflow runs, understand where the bottlenecks are, and tease out the best from your build times. Go to cicube.io now and create a free account to better optimize your GitHub Actions workflows!

CICube GitHub Actions Workflow Duration Monitoring

Token Caching

In respect to token caching, this could increase the efficiency of workflows considerably since it would eliminate the headache of having to retype my token multiple times. To minimize this problem, I can set Git to temporarily remember my credentials so that I don't have to enter the token of my personal access every time I use the Git operation. To cache my personal access token, I would do the following to achieve that:

Caching the Token

  1. To enable caching in Git, I use the following command:
git config --global credential.helper cache
Enter fullscreen mode Exit fullscreen mode
  1. To specify the duration of the cache, in seconds:
git config --global credential.helper 'cache --timeout=3600'
Enter fullscreen mode Exit fullscreen mode

That command caches my credentials for an hour. I can then confirm that my credentials have been cached because subsequent Git operations will no longer ask me to enter my personal access token. This workflow contributes to better security and efficiency, dealing with the GitHub API and command-line repositories.

Best Practices of password-securing of Personal Access Tokens

In today's digital landscape, one must make sure that access tokens are kept secure. One should treat personal access tokens like passwords since they're granting access to sensitive resources. The basic practices for using tokens include the creation of tokens with no more privilege than necessary to accomplish the required action. This would involve using fine-grained personal access token support wherever and when possible in favor of classic tokens, limiting access to only that which is required.

Additionally, other authentications, such as GitHub CLI and/or Git Credential Manager, introduce another level of security by negating the use of direct token utilization either in scripts or through command-line interfaces. And lastly, when operating in an environment using either GitHub Actions or Codespaces, one could utilize the built-in secrets management systems. That would mean storing tokens safely to avoid knowing them directly rather than hard-coding their values in scripts.

Cleaning up your personal access tokens regularly and having an even stricter rule over the creation and deletion of tokens limits them from being exposed to information they do not necessarily have to have. In addition, the overview you get from monitoring GitHub settings will give a good overview of stale or unused tokens that you should revoke. By embracing these practices, developers can create much more secure workflows while minimizing the prominent risks involved with mismanaged tokens.

Conclusion

In short, GitHub Personal Access Tokens are pretty cool and will definitely enhance your workflow and security practices-you have tokens for fine-grained access and classic access. You can keep your projects secure and smoothly continue with your development process by following the best practices of token management and security. Welcome these practices, and you will be assured of a safe development environment.

Top comments (0)