ngrect + jwt

8 views
Skip to first unread message

fatherden61

unread,
Mar 26, 2023, 5:53:52 PM3/26/23
to ngrest
how can I use JWT?

loe...@gmail.com

unread,
Mar 27, 2023, 4:27:57 AM3/27/23
to ngrest
To validate JWT token you may use filters:

It could be something like this:

// AuthFilterGroup.h
class AuthFilterGroup: public ngrest::FilterGroup
{
public:
    AuthFilterGroup();
    ~AuthFilterGroup();
    const std::string& getName() const override;
    const 
ngrest::FiltersMap& getFilters() const override;

private:
    
ngrest::FiltersMap filters;
};



// AuthFilterGroup.cpp

#include "AuthFilterGroup.h"

NGREST_DECLARE_PLUGIN(::ngrest::AuthFilterGroup)


class JwtFilter: public ngrest::Filter
{
public:
    void filter(Phase /*phase*/, MessageContext* context) override
    {
        ngrest::Header* authHeader = context->request->getHeader("Authorization");
        if (!authHeader || !authHeader->value) {
            NGREST_THROW_HTTP("No 'Authorization' header provided", HTTP_STATUS_401_UNAUTHORIZED);
        }
       
        std::string bearer(authHeader->value);
        // TODO validate bearer JWT token

    }

    const std::string& getName() const override
    {
        return name;
    }

    const std::list<std::string>& getDependencies() const override
    {
        return deps;
    }

private:
    std::string name = "JwtFilter";
    std::list<std::string> deps;
};

AuthFilterGroup::AuthFilterGroup():
  filters({
      {
ngrest::Phase::Header, { new JwtFilter() }}
  })
{
}

AuthFilterGroup::~AuthFilterGroup()
{
    for (auto it : filters)
        for (
ngrest::Filter* filter : it.second)
            delete filter;
    filters.clear();
}

const std::string& AuthFilterGroup::getName() const
{
    static const std::string name = "AuthFilterGroup";
    return name;
}

const 
ngrest::FiltersMap& AuthFilterGroup::getFilters() const
{
    return filters;
}

}

For a complete example of filter, please see:




Reply all
Reply to author
Forward
0 new messages