我正在尝试在socket.io客户端发出连接请求时设置http标头.有没有办法做到这一点?
这是我正在做的事情:
// server side
var io = socketio(server);
io.use(function (socket, next) {
// authorize using authorization header in socket.request.headers
});
// client side
var socket = io(); // i'm trying to set an authorization header in this http reqeust
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
经过大量的努力(以及许多tuturials,指南等)后,我设法设置了一个小的.NET Core REST Web API,当存储的用户名和密码有效时,Auth Controller会发出JWT令牌.
令牌将用户ID存储为子声明.
当方法使用Authorize注释时,我还设法设置Web API来验证这些令牌.
app.UseJwtBearerAuthentication(...)
现在我的问题是:如何在我的控制器中(在Web API中)读取用户ID(存储在主题声明中)?
基本上这个问题(我如何在ASP .NET Core中获得当前用户)但我需要一个web api的答案.我没有UserManager.所以我需要从某个地方阅读主题索赔.
我正在尝试通过服务帐户使用Google AnalyticsAPI获取数据.
我一直在搜索stackoverflow如何做到这一点,并使用几个帖子上找到的完全相同的代码,但遇到问题,让它工作.
资料来源:
服务应用程序和Google Analytics API V3:服务器到服务器OAuth2身份验证?
服务应用程序和Google AnalyticsAPI V3:错误101(net :: ERR_CONNECTION_RESET)
这就是我得到的:
require_once('googleAPIGoogle_Client.php');
require_once('googleAPI/contrib/Google_AnalyticsService.php');
const CLIENT_ID = 'xxxxxxxx001.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'xxxxxx001@developer.gserviceaccount.com';
$keyfile = $_SERVER['DOCUMENT_ROOT']."/xxxxxxx284-privatekey.p12";
$client = new Google_Client();
$client->setAccessType('offline');
$client->setApplicationName("cc insights");
$key = file_get_contents($keyfile);
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/analytics.readonly'),
$key)
);
$service = new Google_AnalyticsService($client);
$data = $service->data_ga->get("ga:xxxx7777", "2012-01-01", "2013-01-25", "ga:pageviews");
var_dump($data);
Run Code Online (Sandbox Code Playgroud)
执行时我得到以下错误:
致命错误:未捕获的异常"Google_ServiceException"有消息"错误调用get https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3Axxxx7777&start-date=2012-01-01&end-date=2013- 01-25&metrics = ga%3Apageviews:(403)用户对此个人资料没有足够的权限.在/Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/io/Google_REST.php:66堆栈跟踪:#0 /应用/ XAMPP/xamppfiles/htdocs中/见解/应用/库/ googleAPI/IO/Google_REST .PHP(36):Google_REST :: decodeHttpResponse(对象(Google_HttpRequest))#1 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/service/Google_ServiceResource.php(178):Google_REST ::执行(对象(Google_HttpRequest))#2 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/contrib/Google_AnalyticsService.php(383):Google_ServiceResource - > __呼叫( 'GET',阵列)#3 /应用/ XAMPP/xamppfiles/htdocs中/见解/应用/库/ Google.php(46):Google_DataGaServiceResource->的get('克/Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/io/Google_REST.php上线66
因为我使用与工作示例完全相同的代码,我认为它可能是API或服务帐户设置的问题? …
它们处于“专有格式”是什么意思?我正在阅读有关 JWT 刷新令牌的信息,它们是不透明的令牌,但我不理解该术语。
我使用的是Thinktecture AuthorizationServer(AS),它运行良好.
我想编写一个原生的javascript单页应用程序,可以直接调用WebAPI,但隐式流程不提供刷新令牌.
如果进行了AJAX调用,如果令牌已过期,API将向登录页面发送重定向,因为数据使用动态弹出窗口,这将中断用户.
Facebook或Stackoverflow如何做到这一点,仍然允许页面上运行的javascript调用API?
提出的解决方案
下面的场景是否合理(假设可以使用iframe):
我的SPA指示我到AS,我通过Implicit Flow获得一个令牌.在AS中,我单击允许Read data范围,然后单击Remember decision,然后单击Allow按钮.
由于我点击了Remember decision按钮,每当我点击AS作为令牌时,会自动传回一个新令牌,而我无需登录(我可以看到FedAuth cookie记住了我的决定并相信这使得它能够正常工作).
使用我的SPA(不受信任的应用程序),我没有刷新令牌只有一个访问令牌.所以相反我:
如果FedAuth cookie被盗,我想我仍然会遇到麻烦.
针对上述场景的任何标准或推荐方式?
我正在一个nodejs服务器中编写一个前端在emberjs和后端/服务器端的应用程序.我配置了emberjs,以便用户可以使用第三方Oauth(谷歌,推特,Facebook)登录/注册.我有一个后端用快速nodejs服务器编写,它承载RESTful API.
我没有DB连接到emberjs,我不认为我应该反正,因为它是严格的客户端代码.我打算使用JWT在客户端和服务器端之间进行通信.当用户使用他们的oauth cred登录时,我会使用uid,name,login,access_token和其他详细信息从提供程序返回一个JSON对象.
我正在努力选择如何处理用户注册的策略.没有注册过程,因为它是OAuth.因此流程是如果用户不在我的数据库中,则创建它.我不支持电子邮件/密码验证.当用户第一次使用OAuth提供商登录时,流量会是多少?emberjs是否应该在每次登录时将所有详细信息发送到后端,以便后端可以向db添加新用户?
什么应该是我的JWT机构的一部分?我在想uid和提供者提供的访问令牌.我能想到的一个问题是提供者特定的访问令牌可以改变.用户可以从提供商的站点撤消令牌,并使用emberjs再次注册.
如果它更容易,我愿意在任何其他javascript客户端框架中编写前端.
我是JWT的新手.网上没有太多的信息,因为我作为最后的手段来到这里.我已经使用spring会话使用spring security开发了一个spring boot应用程序.现在我们将转向JWT而不是春季会议.我找到了很少的链接,现在我可以验证用户并生成令牌.现在困难的部分是,我想创建一个过滤器,它将验证对服务器的每个请求,
我有一个api使用jwt的authencation.我正在使用这个api的vuejs应用程序.我正在尝试使用应用程序在应用程序中显示图像
<img src="my/api/link" />
Run Code Online (Sandbox Code Playgroud)
但是api期望Authorization标题jwt token在里面.
我可以像这样在浏览器请求中添加标题(这里几个问题的回答让我相信它不可能)?
有没有办法(使用js)或我应该改变api自己?
我正在尝试对不同的 API 进行 JWT 身份验证。
由于 @nuxtjs/auth-next 似乎不是最新的,而且据我所知,可以在 Nuxt 3 中使用新的全局方法 fetch 而不是 @nuxtjs/axios (也不是最新的),我认为它自己编写身份验证代码不会太难!但这对我来说仍然是个谜,我只找到了 Vue 项目的文档(使用 Pinia 来保持用户登录),我有点迷失了。
我想实现的目标:
对此有什么帮助吗?
这是我的 login.vue 页面(之后我必须使用 Vuetify 和 vee-validate,但还是一次一步!)
// pages/login.vue
<script setup lang="ts">
import { useAuthStore } from "~/store/auth";
const authStore = useAuthStore();
interface loginForm {
email: string;
password: string;
}
let loginForm: loginForm = {
email: "",
password: "",
};
function login() {
authStore.login(loginForm);
}
</script>
<template> …Run Code Online (Sandbox Code Playgroud) OAuth2 JWT配置文件引入了将JWT用作授权授权和客户端身份验证的可能性.
JWT客户端身份验证功能独立于某种授权类型,可以与任何授权类型一起使用,也可以与客户端凭据授予一起使用.
但是,使用JWT授权类型似乎与使用JWT客户端身份验证的客户端凭据授权完全相同,只是语法略有不同.
在这两种情况下,客户端都会联系令牌端点以获取访问令牌:
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=[JWT]
Run Code Online (Sandbox Code Playgroud)
VS
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=[JWT]
Run Code Online (Sandbox Code Playgroud)