使用 apollo 服务器设置 auth0
Posted
技术标签:
【中文标题】使用 apollo 服务器设置 auth0【英文标题】:Setting up auth0 with apollo server 【发布时间】:2018-02-11 09:28:05 【问题描述】:我目前正在使用 apollo 和 express。现在我想将 auth0 添加到解析器,但找不到有关它的文档(altought,graphcool 正在使用它)。通常,您在节点中执行以下操作:
const checkJwt = jwt(
// Dynamically provide a signing key
// based on the kid in the header and
// the singing keys provided by the JWKS endpoint.
secret: jwksRsa.expressJwtSecret(
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json`
),
// Validate the audience and the issuer.
audience: 'YOUR_API_IDENTIFIER',
issuer: `https://YOUR_AUTH0_DOMAIN/`,
algorithms: ['RS256']
);
然后你添加:
app.use(checkJwt)
并且您的 api 的根在等待access_token
时是安全的。
我怎样才能设置阿波罗服务器 - 用这个表达?
【问题讨论】:
【参考方案1】:您可以在 Apollo Server 之前添加 checkJwt。一个例子:
const ApolloServer, gql = require('apollo-server-express');
const express = require('express');
const app = express();
const jwt = require('express-jwt');
const jwksRsa = require('jwks-rsa');
const cors = require('cors');
const fs = require('fs');
const resolvers = require('./data/resolvers').resolvers;
const typeDefs = gql(fs.readFileSync('./data/schema.graphql', 'utf8'));
// Enable CORS
app.use(cors());
//jwtCheck
const checkJwt = jwt(
// Dynamically provide a signing key based on the kid in the header and the singing keys provided by the JWKS endpoint
secret: jwksRsa.expressJwtSecret(
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json`
),
// Validate the audience and the issuer
audience: 'YOUR_API_IDENTIFIER', //replace with your API's audience, available at Dashboard > APIs
issuer: 'https://YOUR_AUTH0_DOMAIN/',
algorithms: [ 'RS256' ]
);
app.use(checkJwt);
//Apollo Server
const server = new ApolloServer( typeDefs, resolvers,
context: ( req ) =>
const user = req.user;
return user ;
);
server.applyMiddleware( app );
app.listen( port: 4000 , () => console.log(`? Server ready at http://localhost:4000$server.graphqlPath`));
在本例中,解码后的令牌被传递给上下文中的解析器。
【讨论】:
以上是关于使用 apollo 服务器设置 auth0的主要内容,如果未能解决你的问题,请参考以下文章
多个错误 auth0 反应 apollo babel webpack
前端的用户角色/权限 - React / GraphQL / Apollo Client
如何定期获取远程公钥并存储在 Apollo graphql 服务器中?
使用 subscriptions-transport-ws 设置 Apollo 服务器?
如何使用 Apollo Server 清除设置的 cookie
Auth0 授权者拒绝来自服务的 JWT 令牌 - “jwt 颁发者无效。预期:https://myservice.auth0.com”