iOS Development

The right way to retailer keys in env recordsdata?

The right way to retailer keys in env recordsdata?
Written by admin


On this tutorial I will present you save and cargo secret keys as base64 encoded strings utilizing dotenv recordsdata in Vapor 4.

Vapor

Utilizing the Surroundings in Vapor 4

Identical to many widespread server aspect frameworks, your Vapor primarily based backend software can load a file referred to as .env. It’s doable to retailer key-value primarily based (secret) configuration values inside this file. If you run the app, one of many following file can be loaded, primarily based on the present atmosphere:

  • Manufacturing (.env)
  • Growth (.env.improvement)
  • Testing (.env.testing)

If you execute your assessments the .env.testing file can be used. In the event you begin the app utilizing the serve Vapor command it’s also possible to change the atmosphere utilizing the --env or -e flag. The accessible choices are manufacturing and improvement, and the corresponding .env file can be loaded. It’s doable to create a customized atmosphere, you possibly can learn extra about this within the official Vapor docs. The .env file normally incorporates one key and worth per line, now the issue begins while you need to retailer a multiline secret key within the file. So what can we do about this? 🤔




Base64 encoded secret keys

Sure, we are able to encode the key key utilizing a base64 encoding. No, I do not need to copy my secrets and techniques into an on-line base64 encoder, as a result of there’s a fairly easy shell command that I can use.


echo "<my-secret-key>" | base64


In the event you do not like unix instructions, we are able to at all times put collectively just a little Swift script and use an extension on the String sort to encode keys. Simply save the snippet from beneath right into a base64.swift file, put your key into the important thing part, give the file some executable permission & run it utilizing the chmod o+x && ./base64.swift one-liner command and voilá…


#! /usr/bin/swift

import Basis

extension String {

    func base64Encoded() -> String? {
        return information(utilizing: .utf8)?.base64EncodedString()
    }
}

let key = """
    <my-secret-key-comes-here>
"""

print(key.base64Encoded()!)


You may copy & paste the encoded worth of the key key into your personal .env.* file, substitute the asterix image together with your present atmosphere after all, earlier than you do it. 🙈


//e.g. .env.improvement
SECRET_KEY="<base64-encoded-secret-key>"


Now we simply should decode this key someway, earlier than we are able to begin utilizing it…



Decoding the key key

You may implement a base64 decoder as a String extension with only a few strains of Swift code.

import Basis

extension String {

    func base64Decoded() -> String? {
        guard let information = Knowledge(base64Encoded: self) else { return nil }
        return String(information: information, encoding: .utf8)
    }
}


Now in my initiatives I like to increase the Surroundings object and place all my customized variables there as static constants, this fashion I can entry them in a very handy means, plus if one thing goes incorrect (normally after I do not re-create the .env file after a git reset or I haven’t got all of the variables current within the dotenv file) the app will crash due to the compelled unwraps, and I will know for certain that one thing is incorrect with my atmosphere. It is a crash for my very own security. 💥


import Vapor

extension Surroundings {
    static let secretKey = Self.get("SECRET_KEY")!.base64Decoded()!
}


Surroundings.secretKey


I believe this strategy could be very helpful. In fact you must place the .env.* sample into your .gitignore file, in any other case should you place some secrets and techniques into the dotenv file and also you push that into the distant… properly, everybody else will know your keys, passwords, and so on. You do not need that, proper? ⚠️


Be happy to make use of this methodology when it’s a must to implement a Register With Apple workflow, or a Apple Push Notification service (APNs). In these circumstances you will undoubtedly should go one ore extra secret keys to your Vapor primarily based backend software. That is it for now, thanks for studying.


About the author

admin

Leave a Comment