我已经阅读了这篇关于如何开始在 Flutter 中使用 Auth0 的文章。
作者写道:“ ……完整的安全注销超出了本文的范围”。
文章中的注销方法是这样的:
void logoutAction() async {
await secureStorage.delete(key: 'refresh_token');
setState(() {
isLoggedIn = false;
isBusy = false;
});
Run Code Online (Sandbox Code Playgroud)
}
我从设备上的安全存储中删除了刷新令牌。现在,我希望能够进行更完整的注销,该用户必须使用用户名和密码再次进行完整登录。目前,用户无需输入用户名和密码即可登录,我认为这是由于访问令牌保存在某处。如果这是由于访问令牌造成的,我如何从浏览器 cookie 或存储它的任何位置删除此访问令牌?
避免存储访问令牌的一种方法是添加promptValues: ['login]到登录方法中。这样做的问题是用户每次都必须登录,因此完全消除了存储的访问令牌的好处。再次强调,我希望用户能够“完全”注销,从 cookie 中清除访问令牌。
Future<void> loginAction() async {
setState(() {
isBusy = true;
errorMessage = '';
});
try {
final AuthorizationTokenResponse result =
await appAuth.authorizeAndExchangeCode(
AuthorizationTokenRequest(
AUTH0_CLIENT_ID,
AUTH0_REDIRECT_URI,
issuer: 'https://$AUTH0_DOMAIN',
scopes: ['openid', 'profile', 'offline_access'],
// promptValues: ['login']
),
);
final idToken = parseIdToken(result.idToken);
final profile = await getUserDetails(result.accessToken); …Run Code Online (Sandbox Code Playgroud) 我正在使用axios拦截器用标头来装饰我的所有请求Authorization。
@auth0/nextjs-auth0我通过使用 API 路由获取令牌/api/token:
import auth0 from '@/libs/auth0/auth0';
import { AccessTokenResponse } from '@auth0/nextjs-auth0/dist/tokens/token-cache';
import { NextApiRequest, NextApiResponse } from 'next';
export async function getAccessToken(
req: NextApiRequest,
res: NextApiResponse
): Promise<AccessTokenResponse> {
const tokenCache = auth0(req).tokenCache(req, res);
return tokenCache.getAccessToken();
}
export default async function token(
req: NextApiRequest,
res: NextApiResponse
): Promise<void> {
try {
const { accessToken } = await getAccessToken(req, res);
res.status(200).end(accessToken);
} catch (error) {
res.status(error.status || 500).end(error.message);
}
}
Run Code Online (Sandbox Code Playgroud)
api …
我是 AWS API Gateway 和 Lambda 的新手,我想知道是否有人可以提供帮助?
我使用 Auth0 生成一个访问令牌,它适用于邮递员,为第一个 lambda 函数调用返回所有正确的 JSON 数据
当我在邮递员上调用第二个 lambda 函数时,它表示用户没有获得此资源的授权:
"Message": "用户无权访问此资源"
和
403 Forbidden
Run Code Online (Sandbox Code Playgroud)
这仅持续 5 分钟,然后我可以在 Postman 上调用第二个函数,但无法再调用第一个函数并出现相同的错误。
关于如何解决这个问题的任何想法
谢谢!
amazon-web-services postman aws-lambda auth0 aws-api-gateway
我正在尝试为 Cypress 创建登录命令,并注意到他们关于如何执行此操作的博客与Auth0 React SDK的预期值不匹配。看起来他们使用了自定义的 Express 应用程序来处理登录,而不是使用 SDK 来处理登录(根据官方 Auth0 文档)。
Cypress官方文档生成了一个本地存储键值对,如下所示。
const item = {
body: {
decodedToken: {
claims,
user: { ... },
audience,
client_id,
},
},
expiresAt: exp,
}
window.localStorage.setItem('auth0Cypress', JSON.stringify(item))
Run Code Online (Sandbox Code Playgroud)
然而,由 Auth0 React SDK 创建的生成的内容类似于:
const item = {
body: {
access_token,
audience,
client_id,
decodedToken: {
claims,
user: { ... },
encoded,
header
},
expires_in,
id_token,
scope,
token_type
},
expiresAt: exp
}
window.localStorage.setItem(`@@auth0spajs@@::${client_id}::${audience}::${scope}`, JSON.stringify(item))
Run Code Online (Sandbox Code Playgroud)
我能够使https://${auth)_domain}/oauth/token请求正常工作,但是无法弄清楚如何从响应中获取数据,以使其适合 Auth0 React SDK 想要的数据结构。 …
长话短说,我遇到了 auth0 的 AuthHttpInterceptor 类实际上没有将令牌附加到任何传出请求的问题。
我一直在关注本教程系列,以便在简单的 Flask 和 Angular 应用程序中设置 auth0。我遵循 Flask 组件,并设置了一个简单的端点来从数据库中检索一些数据。请注意,@requires_auth装饰器与教程中的装饰器完全相同:
@app.route("/api/v1/members", methods=["GET"])
@requires_auth
def get_all_members():
# Pagination Logic
page_num, page_size = 1, 10
if request.args.get('pn'):
page_num = int(request.args.get('pn'))
if request.args.get('ps'):
page_size = int(request.args.get('ps'))
page_start = (page_size * (page_num - 1))
return_data = []
for member in members.find().skip(page_start).limit(page_size):
# Convert all IDs into strings
member = convert_member_ids(member)
return_data.append(member)
return make_response(jsonify(return_data), 200)
Run Code Online (Sandbox Code Playgroud)
这不是将受到限制的实际端点,我只是保护此页面以测试身份验证是否有效。
在 Angular 中,这是由检索数据并将其显示在网页上的组件使用的:
export class MembersComponent implements OnInit {
constructor(private webService: WebService) …Run Code Online (Sandbox Code Playgroud) 我对使用 RTK 查询完全陌生,我之前创建了应用程序,但没有身份验证,一切正常,现在我想使用 Auth0 添加身份验证,但我无法访问我添加getTokenSilently()
PS 的任何文件。getTokenSilently 是 {token} 感谢您的帮助
export const myApi = createApi({
reducerPath: "points",
baseQuery: fetchBaseQuery({
baseUrl: "/",
prepareHeaders: (headers, { getState }) => {
const token = getState()
if (token) {
headers.Authorization = `Bearer ${token}`
}
return headers
},
}),
endpoints: builder => ({
getPoints: builder.query({
query: () => `/`,
}),
}),
})
export const { useGetPointsQuery } = myApiRun Code Online (Sandbox Code Playgroud)
我已完成以下教程以将我的 Next.js 应用程序与 Auth0 集成。我可以很好地登录和注销,但是当登录后尝试在页面上显示用户信息时,无法返回该user对象。user我已确保使用我的应用程序的密钥渲染对象或 env.local 文件的 Profile.js 页面没有任何问题。
经过进一步检查,我注意到浏览器控制台中出现错误,内容为:Failed to Load Resource ... 404 Not Found: http://localhost:3000/api/auth/me。
这个错误让我有一种直觉,因为我修改了 next.config.js 中的基本路径,所以我的 next.js 应用程序和 Auth0 之间的映射存在差异:
module.exports = {
basePath: '/my_path',
webpack: (config) => {
return config
},
env: {
},
publicRuntimeConfig: {
BACKEND_API_URL: process.env.BACKEND_API_URL,
CONSENT_COOKIE_NAME: 'ConsentCookie'
},
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将我的基本路径添加到user返回对象的端点中?最终结果看起来像:https://localhost:3000/my_path/api/auth/me
我不能 100% 确定这会解决我user正确返回对象的问题,因此我愿意接受任何其他建议,并愿意在我的应用程序中添加有关特定文件的更多上下文。
编辑:在 Auth0 论坛(链接)上提出这个问题后,有人向我指出了这个链接,这是另一个示例 Next.js Auth0 示例应用程序,只不过他们用 TypeScript(我不熟悉)编写了前端。他们正在操纵UserContext对象并重置ProfileURL,这就是我所追求的;那么与此等效的 JavaScript …
auth0 实现的中间件示例
func EnsureValidToken(next http.Handler) http.Handler {
// EnsureValidToken is a middleware that will check the validity of our JWT.
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
issuerURL, err := url.Parse("https://" + os.Getenv("AUTH0_DOMAIN") + "/")
if err != nil {
log.Fatalf("Failed to parse the issuer url: %v", err)
}
provider := jwks.NewCachingProvider(issuerURL, 5*time.Minute)
jwtValidator, err := …Run Code Online (Sandbox Code Playgroud) 由于目前没有适用于 SvelteKit 的 Auth0 SDK,因此当我打算将 Auth0 合并到我的 SvelteKit 应用程序中(包括服务器端身份验证)时,我正在学习(或至少尝试学习)有关身份验证的知识,这比我最初的意图要多得多。该文档有点令人困惑(或者可能它只是很大,或者可能我只是不那么聪明),所以我希望在这里描述我的身份验证流程以供批评(希望这对将来的其他人有帮助) )。
\n我已经阅读了这篇关于 SPA auth以及Auth0 教育产品的精彩文章。但我仍然不确定我是否正确地将这些点连接起来。这是我的流程。所有这一切仅通过 SSL 发生。
\nSameSite=strict; HTTPOnly; Secure;设置了选项),以便它通过路由授权请求传递回服务器。所以让我在这里暂停一下...我明白(至少根据一些内容,包括上面链接的 Auth0 教育视频)ID 令牌不应该用于身份验证,并且永远不应该被传递。这就是访问令牌的用途。然而,在这种情况下,交换都是第一方(我的客户端,我的服务器),我的理解是“可以”。
\n然而,Auth0 SDK 本身并没有设置 cookie,这确实让我感到紧张。这让我怀疑我是否做错了\xe2\x84\xa2。
\n在服务器上,我使用公钥验证 id_token,然后可以根据需要在后端保存用户详细信息等,并允许访问适当的路由(hooks.server.js在我的 SvelteKit 应用程序中通过)。
当用户注销或令牌过期时,cookie 将被删除。
\n(顺便说一句,我还没有弄清楚如何在 ID 令牌过期时刷新它,因为 Auth0 客户端 SDK 似乎永远不会更新浏览器存储中的 ID 令牌,即使它已过期。)
\n …我想从Java API(auth0客户端)获取Auth0用户列表。我可以做吗?基于Java + Spring Security的API。我试图用RestTemplate做到这一点:
List findAllUsers(){
String idToken = RestService.getIdToken()
HttpHeaders headers = new HttpHeaders()
headers.set("Authorization", "Bearer $idToken");
List users = []
try{
ResponseEntity entity = restTemplate.exchange(issuer+"api/v2/users", HttpMethod.GET, new HttpEntity<Object>(headers), List)
users = entity.getBody()
} catch (HttpClientErrorException e){
e.printStackTrace()
}
return users
}
Run Code Online (Sandbox Code Playgroud)
但是我正在获得403禁止状态。
auth0 ×10
javascript ×3
access-token ×2
next.js ×2
angular ×1
appauth ×1
aws-lambda ×1
cypress ×1
flask ×1
flutter ×1
go ×1
go-fiber ×1
java ×1
jwt ×1
postman ×1
reactjs ×1
rtk-query ×1
session ×1
sveltekit ×1
typescript ×1