当用户使用 ASP.Net Web Api 获得授权时,如何返回值?我尝试覆盖授权属性上的 OnAuthorize,但方法类型为“void”,因此我无法返回任何值,或者我应该在标头上附加我想要的值作为响应标头吗?
这是我想要实现的目标:
我尝试通过 RESTful 应用程序中的令牌授权配置 Spring Security。
我的 AuthenticationFilter 看起来像:
@Configurable
public class CustomTokenAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
private static final Logger logger = LoggerFactory.getLogger(CustomTokenAuthenticationFilter.class);
private final static String SECRET_KEY = "ThisIsASecretKey";
public final String HEADER_SECURITY_TOKEN = "X-Token";
@Inject
private Users usres;
public CustomTokenAuthenticationFilter(String defaultFilterProcessesUrl) {
super(defaultFilterProcessesUrl);
super.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher(defaultFilterProcessesUrl));
setAuthenticationManager(new NoOpAuthenticationManager());
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws IOException,
ServletException {
String token = request.getHeader(HEADER_SECURITY_TOKEN);
logger.info("token found:" + token);
TokenInfo tokenInfo = new TokenInfo(token, SECRET_KEY);
AbstractAuthenticationToken userAuthenticationToken;
try {
userAuthenticationToken = …Run Code Online (Sandbox Code Playgroud) 分解条件 GET 的原因:
在RFC 2616它指出GET方法改变为“有条件GET”如果请求消息包括If-*(If-Modified-Since,If-Unmodified-Since,If-Match,If-None-Match,或If-Range)头字段。
然后声明:
条件 GET 方法请求仅在条件标头字段描述的情况下传输实体。
根据我的理解,这是说如果在任何新的后续请求中满足“ ”条件,它只会返回被请求的数据If-*。例如,如果 GET 请求返回一个带有Etag标头的响应,那么下一个请求必须包含If-None-Match带有ETag值以将客户端传回请求的资源。
但是,如果客户端在获取返回的 " ETag" 标头(以返回If-None-Match)之前必须发送初始请求,那么他们已经拥有所请求的资源。因此,任何返回If-None-Match带有该ETag值的标头的未来请求仅指示所请求值的返回,返回200 OK(如果客户端没有从初始请求返回If-None-Match和 ETag值)或304 Not Modified(如果他们这样做),其中通过缓存资源来帮助客户端和服务器。
我的问题:
为什么它说明了实体(从请求的资源)将“转移ONLY ”如果If-*条件(在我的例子,其中客户端返回等会见ETag与价值If-None-Match,以缓存所请求的资源),如果资源或者“实体" 是否被返回,有或没有 " If-*" …
conditional get restful-authentication http-1.1 http-headers
我正在尝试使用python 3.6的VisualStudioOnline REST API.(使用python 2.x的大量示例)
python脚本响应是通用的html登录页面.
我已经使用REST控制台Chrome插件测试了此脚本生成的url,并且使用我的个人访问令牌工作正常.
import json
import base64
import urllib.request
personal_access_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
headers = {}
headers['Content-type'] = "application/json"
headers['Authorization'] = b'Basic ' +
base64.b64encode(personal_access_token.encode('utf-8'))
instance = "mycompany.visualstudio.com"
project = "MyProject"
repository ="MyRepository"
pullrequest = "3468"
api_version = "3.0"
repositories_url = ("https://%s/DefaultCollection/%s/_apis/git/repositories?
api-version=%s" % (instance, project, api_version))
print(repositories_url)
request = urllib.request.Request(repositories_url, headers=headers)
opener = urllib.request.build_opener()
response = opener.open(request)
print(response.read())
Run Code Online (Sandbox Code Playgroud)
Powershell示例
如何使用个人访问令牌对Visual Studio Team Services进行身份验证?
C#和curl示例
https://www.visualstudio.com/en-us/docs/integrate/get-started/authentication/pats
restful-authentication python-3.x azure-devops azure-devops-rest-api
如何创建一个类方法来从字符串输入中获取参数?
字符串值GetArugmentValueByName(字符串输入,字符串名称)
例
myInput="code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6&
client_id=21302922996.apps.googleusercontent.com&
client_secret=XTHhXh1SlUNgvyWGwDk1EjXB&
redirect_uri=https://www.example.com/back&
grant_type=authorization_code";
Run Code Online (Sandbox Code Playgroud)
如果我这样做
string myGrantType = GetArugmentValueByName(myInput, "grant_type");
Run Code Online (Sandbox Code Playgroud)
myGrantType的值应该等于"authorization_code"
我正在从头开始构建我的第一个REST API,并试图了解处理API令牌的最佳方法.我不是在谈论"用户身份验证"(我会使用OAuth).我正在谈论应用程序用来标识自身的公共/私有令牌,以便我的API可以决定是否允许应用程序首先使用API.
某些API资源可供具有有效令牌的任何人使用,有些则需要OAuth身份验证.我将通过HTTPS与API进行通信,但我仍然希望确保遵循某种来回传递令牌的标准.
我正在使用restlet,我想创建一个登录机制,密码和用户名存储在MysqlDatabase中.
public class zeus extends Application {
@Override
public Restlet createInboundRoot() {
// ?????????? ??? router.
Router router = new Router(getContext());
router.attach("/customers", CustomersResource.class);
ChallengeAuthenticator guard = new ChallengeAuthenticator(getContext(), ChallengeScheme.HTTP_BASIC, "login required");
UserVerifier verifier = new UserVerifier();
verifier.verify(identifier, secret); // where do i get the identifier ?
guard.setVerifier(verifier);
guard.setNext(router);
return guard;
}
}
Run Code Online (Sandbox Code Playgroud)
和我的用户验证器类
public class UserVerifier extends SecretVerifier {
@Override
public boolean verify(String identifier, char[] secret) {
System.out.println(identifier);
System.out.println(secret);
//TODO compare with the Database
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到如何获取标识符.
我有一个关于RESTful API设计的问题.遵循REST的指导原则,所有端点都应该是名词和复数,并且永远不应该是动词.但是,通常认证路由是:
/login
/logout
Run Code Online (Sandbox Code Playgroud)
这两个都是动词.如果你应该遵守指南,那么这些路线看起来应该更像:
/users?action=login
/users?action=logout
Run Code Online (Sandbox Code Playgroud)
但我从来没有使用任何具有此特定身份验证实现的API,每个人都使用第一个,包括我.但是我想知道这是因为很多人没有完全遵循这些指导方针而已成为一种习惯,还是有其他原因?
rest restful-authentication restful-url restful-architecture
我已经看到OAuth 2.0协议要求具有API的“ Web App Server”以及对用户进行身份验证的“ OAuth 2”服务器。尽管可以在单个服务器上完成此操作,还是有特定原因必须在两个单独的服务器上完成?
身份验证是否可以是单个Web服务器上的登录API调用,该API本身会返回访问令牌,或者这将是错误的身份验证方式吗?
api ×2
c# ×2
java ×2
rest ×2
arguments ×1
azure-devops ×1
conditional ×1
get ×1
http-1.1 ×1
http-headers ×1
oauth-2.0 ×1
python-3.x ×1
restful-url ×1
restlet ×1
restlet-2.0 ×1
server ×1
spring ×1
string ×1
token ×1
web-services ×1