我有一个应用程序是服务器上的Node + Express + Passport和客户端上的jQuery + Backbone.js.客户端在URL中使用哈希标记,但是对于某些功能,用户登录是很重要的.
我希望可以通过URL访问该应用,例如http://mydomain.com/app#cone/waffle/flavor/mint/toppings/sprinkles
:
/login
则会转到然后转到请求的URL继这篇SO帖子,关于Node.js Passport的Google策略的自定义returnUrl之后 ,我就这样了
它似乎在登录后从重定向上的原始URL中删除哈希参数.
有什么方法可以在将哈希参数重定向到原始目标时保留哈希参数吗?
从这篇文章中,从请求URL获取哈希参数我得到了哈希标签在服务器上不可用的想法,这是使用哈希标签的全部要点.
所以我怀疑这是不可能的.也许以某种方式在本地缓存params并在重定向上检索它们,对[original URL minus hastags] + #use-cached-params
吗?
我正在尝试使用使用我的 Windows 身份验证的共享点站点。我可以使用该requests
模块访问该站点,但它要求我明确说明我的 Windows 密码。
import requests
from requests_ntlm import HttpNtlmAuth
SITE = "https://sharepointsite.com/"
PASSWORD = "pw"
USERNAME = "domain\\user"
response = requests.get(SITE, auth=HttpNtlmAuth(USERNAME,PASSWORD))
print response.status_code
Run Code Online (Sandbox Code Playgroud)
Python 有没有办法通过 Windows 身份验证访问该站点,这样我就不必提供密码?看起来这可能是可能的,requests_nltm
但我不知道如何。
让我引用来自 www.w3.org 的HTTP 1.1 RFC 规范。
10.4.2 401未授权
该请求需要用户身份验证。响应必须包含一个 WWW- Authenticate头域(第 14.47 节),其中包含适用于请求资源的质询。客户端可以使用合适的Authorization头域(第 14.8 节)重复请求。
14.8授权
用户代理通常(但不一定)在收到 401 响应后通过在请求中包含授权请求头字段来向服务器进行身份验证。该授权域包含所述用户代理的对被请求的资源的领域中的认证信息的凭据。
为什么要在Authorization标头中传递用于证明用户身份 ( Authentication )的凭据?
我正在编写一个 Chrome 扩展程序,并一直在尝试使用 chrome.identity.launchWebAuthFlow 与 Google 进行身份验证。我更喜欢 chrome.identity.getAuthToken (它确实有效),因为 getAuthToken 获取当前登录到 Chrome 的用户的令牌——他们可能登录到多个 Google 帐户。我希望用户能够将特定的 Google 日历连接到我的扩展程序,并且该日历可能属于与他们登录 Chrome 不同的用户。
所以,我一直在尝试使用 chrome.identity.launchWebAuthFlow 来做到这一点,但通常会在不匹配的 redirect_uri 问题上失败。我已经尝试了您可以在 Google API 开发人员控制台中设置的几乎所有类型的凭据。(“Chrome 应用程序”似乎是正确的,但我也尝试过 Web 应用程序、其他和 iOS。)我尝试使用 chrome.extension.getURL('string') 和 chrome.app.getRedirectURL 的结果('string') 作为我的 redirect_uri。
我尝试了/sf/ask/2826897881/引用的示例应用程序,但也无法使其正常工作。
我怀疑我正在尝试做一些曾经被允许但不再允许的事情,或者只是从未奏效。
这是我的代码示例,但我认为我的问题确实出在 API 开发控制台中——我没有看到设置适用于扩展的配置的方法:
var auth_url = 'https://accounts.google.com/o/oauth2/v2/auth';
var client_key = *[client id from API dev console]*
var auth_params = {
client_id: client_key,
redirect_uri: chrome.identity.getRedirectURL("oauth2.html")
scope: 'https://www.googleapis.com/auth/calendar'
};
auth_url += '?' + $.param(auth_params);
chrome.identity.launchWebAuthFlow({url: auth_url, interactive: true}, function(token) { console.log(token); …
Run Code Online (Sandbox Code Playgroud) 我正在努力为旧版PHP站点添加REST API.这是为内部应用程序提供端点,所以我可以自由地设计内容以及支持哪些内容.
我现在需要添加到此API的是一种登录方式,然后以特定用户身份执行操作.该网站已在几年前建成,并不一定是当时的最佳实践,所以我很遗憾对我的工作方式有点限制.所有这些都需要使用MySQL 5.6在PHP 5.4中运行.
我一直在阅读常见的设计,OAuth1/2看起来像是最常见的标准.然而,对于我的目的来说,这似乎是一种巨大的矫枉过正,因为它具有我不需要的各种功能,并且实现起来似乎非常复杂.
相反,我正计划做这样的事情:
get_session
API端点,该端点生成随机会话ID,将其保存到数据库中的表并将其返回给客户端.login
端点发送请求进行身份验证,发送用户名,密码和会话ID(显然通过HTTPS).logout
端点发送请求,服务器会删除与用户帐户的关联.这是一个合理的设计吗?它显然不是很复杂,但我正在寻找一些我可以实现的东西,没有太大的麻烦或需要第三方库.
我开发的应用程序规定软件应该防止未经授权的访问.为了实现这一点,我使用了基于用户和密码的身份验证,并提供了两个角色 - 标准用户和管理员.
这完全在Python中实现,使用SQLAlchemy与数据库进行交互,PyQt用于用户界面.
使用brcypt对输入的密码进行哈希处理,然后将数据库中存在的哈希值与相应的用户名(Web服务中使用的标准身份验证技术)进行比较.
身份验证成功后,调用的变量将self.authenticatedUser
保存类的SQLAlchemy实例User
.
这种实现的结果是任何人都可以编辑登录方法,直接查询数据库直接查找User
具有用户名admin 的类型的对象,并将返回的SQLAlchemy实例分配给黑客User
,self.authenticatedUser
并且黑客可以访问该系统.
因为,我正在分发用python编写的这个软件,黑客(或任何类型的程序员)禁用身份验证机制只需几分钟.此外,我无法通过获取登录登录令牌在此处使用Web服务进行身份验证或授权,因为该软件将在具有空隙的环境中使用.
有没有具体的方法以更安全的方式实现这一点?
python security authentication desktop-application sqlalchemy
使用angularfire2和firebase的Angular 5身份验证应用.该应用程序可以使用应用程序内链接进行精确导航,例如在登录后重定向到仪表板或通过应用程序中的按钮/链接链接到另一个页面(组件).但是,如果在" http:// localhost:4300/dashboard "页面上我点击了浏览器刷新(Chrome),它会将我重定向回登录页面.在浏览器上使用BACK/NEXT工作正常 - 但我想因为我并没有特别要求去特定的路线.
我有一个NavBar,通过使用订阅,识别我是否登录(见右上方截图...) - 这一切都正常.
我猜测在浏览器刷新或直接URL导航时,它会在确定我是否已经过身份验证之前尝试加载页面.开发控制台从我插入导航栏组件的console.log语句中建议这一点,并且在Angular核心建议我们以开发模式运行之前它们是"未定义"的事实:
app.routes:
import { Routes, RouterModule } from '@angular/router';
import { LoginComponent } from './views/login/login.component';
import { DashboardComponent } from './views/dashboard/dashboard.component';
import { ProfileComponent } from './views/profile/profile.component';
import { AuthGuard } from './services/auth-guard.service';
const appRoutes: Routes = [
{
path: '',
component: LoginComponent
},
{
path: 'dashboard',
canActivate: [AuthGuard],
component: DashboardComponent
},
{
path: 'profile',
canActivate: [AuthGuard],
component: ProfileComponent
},
{
path: '**',
redirectTo: ''
}
];
export const AppRoutes …
Run Code Online (Sandbox Code Playgroud) 我们使用resteasy开发了一个REST API.(部署在wildfly 10中)
基本上这些REST API是从另一个应用程序内部调用的,端点是用keycloak保护的.
但是一个端点暴露给外部方(该端点也使用keycloak保护).
但由于外部方无法提供Keycloak Autherization代码,我们已经完成了一个实现,其中客户端使用应用程序生成的auth_key进行注册,客户端将使用该auth_key调用端点.
然后在web过滤器(javax.servlet.Filter)中,使用tha auth_key我们获得相关的keycloak authntication Bearer令牌.如果需要(例如:令牌已过期),我们也会调用Keycloak Server.收到后,我们将Autherization令牌添加到Web过滤器中的httpRequest并继续到终点应用程序.
但问题是,在Web Filter之前调用KeyCloak身份验证.我正在寻找的是"如何在密钥泄露认证之前调用Web过滤器?"
编辑:
现在我正试图找到这里提到的方法.在Keycloak中进行身份验证之前将请求标头设置为请求.我可以在身份验证发生之前接听电话.但是我无法在那里设置请求标头.
web.xml中
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Restful Web Application</display-name>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<!-- keycloak -->
<context-param>
<param-name>keycloak.config.resolver</param-name>
<param-value>package.to.HeaderBasedKeycloakConfigResolver</param-value>
</context-param>
<security-constraint>
<web-resource-collection>
<web-resource-name>REST endpoints</web-resource-name>
<url-pattern>/ep-name/resource-name</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>resource-name</role-name>
</auth-constraint>
</security-constraint>
<!-- more security-constraint -->
<!-- more security-constraint -->
<!-- more security-constraint -->
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>realm-name</realm-name>
</login-config>
<security-role>
<role-name>role-name-for-resource-1</role-name>
<role-name>role-name-for-resource-2</role-name>
<!-- more security-role -->
<!-- more security-role -->
<!-- …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种将colab会话连接到我的Google驱动器时自动进行身份验证过程的方法。
我更愿意使用内置工具代替PyDrive。
简而言之:运行以下单元格,而无需通过登录并从对话框复制密码来手动进行身份验证
from google.colab import drive
drive.mount('/content/drive/')
Run Code Online (Sandbox Code Playgroud) 我在ASP.NET Core API项目中使用了OAuth cookie身份验证。所有API在此项目中均得到授权。成功登录后,可以从浏览器网址栏中访问所有API。当我尝试从其他域访问Ajax请求中的API时,总是返回Unauthorized。
在这里,如何从Ajax请求中识别用户是否已通过身份验证?
API domain = ".apidomain.com"
Client domain = ".clientdomain.com"
Run Code Online (Sandbox Code Playgroud)
API配置:
services.AddAuthentication("oAuthSecurityScheme")
.AddOAuth("login.microsoftonline.com",
options =>
{
....
....
}).AddCookie(
"oAuthSecurityScheme",
options =>
{
options.LogoutPath = new PathString("/logout");
options.LoginPath = new PathString("/api/v1/account/authorize");
options.ExpireTimeSpan = new TimeSpan(7, 0, 0, 0);
options.SlidingExpiration = true;
options.Cookie.Name = "CustomerOAuthCookie";
options.Events.OnRedirectToLogin = UnAuthorizedResponseAsync;
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.HttpOnly = false;
});
Run Code Online (Sandbox Code Playgroud)
客户申请:
$.ajax({
url: "https://localhost:44332/api/gettickets/1",
type: 'GET',
success: function (result)
{
alert(result);
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)
注意:当我直接在浏览器中访问以下API时,它将返回正确的响应 https:// localhost:44332 / api / gettickets / …
authentication ×10
python ×3
api ×2
.net-core ×1
angular ×1
cookies ×1
cross-domain ×1
express ×1
google-api ×1
http ×1
java ×1
keycloak ×1
node.js ×1
oauth-2.0 ×1
passport.js ×1
php ×1
rest ×1
security ×1
session ×1
sharepoint ×1
sqlalchemy ×1
wildfly-10 ×1