是否可以将ASP.NET Web API 2与.net 4.0一起使用?我尝试从旧版本升级,但我得到:
无法安装包'Microsoft.AspNet.WebApi.Client 5.0.0'.您正在尝试将此软件包安装到以".NETFramework,Version = v4.0"为目标的项目中
我尝试让OpenID Connect运行...我的Web API用户设法获得OpenID Connect Provider的授权码.我应该如何将此代码传递给我的ASP.NET Web API?如何配置OWIN中间件,以便我可以使用授权码获取访问令牌?
更新:SPA使用AJAX与我的Web服务(ASP.NET Web API)进行通信.在我的Web服务中使用OWIN Middleware.我将OpenIDConnect设置为身份验证机制.首次调用Web服务时,它成功将用户重定向到OpenID Connect Provider的登录页面.用户可以登录并获得授权码.AFAIK此代码现在可以(通过我的Web服务)用于访问令牌.但是,我不知道如何将此代码返回到我的Web服务(这是使用标头完成吗?)然后配置什么来获取访问令牌.我想我可以手动调用令牌端点,但我想利用OWIN组件.
我正在尝试将Swashbuckle 5.0.x与OAuth2一起使用.我想使用OAuth2的资源所有者密码凭据授权.我基本上只想先请求令牌并在每个请求中包含此令牌(例如,不需要范围).
有人能帮忙吗?我如何配置swagger/swashbuckle?
目标: 我想使用OpenID Connect保护我的Web服务(使用OWIN的ASP.NET Web API).身份提供商是Google.
重要提示: 我只负责Web服务.我没有任何Web应用程序(没有UI;这取决于使用我的Web服务的第三方).
注意事项: 由于我的Web服务在服务器上运行,我认为最好使用授权代码流(或混合?).
到目前为止做了什么:我配置OWIN(在我的Web服务中)使用OpenID Connect(UseOpenIdConnectAuthentication).
当前行为: 我有人未经授权尝试访问Web服务,Web服务将她重定向(发送302)给Google.由于我没有UI,因此需要第三方正确显示同意页面.假设用户同意并按"接受".
在这里,我被卡住了...据我所知,谷歌发回了授权码(我的网络服务可以使用它来获取访问令牌).我怎样才能获得授权码?Google甚至支持授权代码流程(ResponseType = code)吗?
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = "aClientId",
ClientSecret = "aClientSecret",
Authority = "https://accounts.google.com/",
RedirectUri = "do I need this??", //I guess here I would register a resources... but what to do in there?
ResponseType = "code", //does Google even support code??
Scope = "openid",
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthorizationCodeReceived = (context) =>
{
var code = context.Code; //I never …Run Code Online (Sandbox Code Playgroud) 我有一个在端口8080上运行的自托管API.在端口80上是我的网络服务器(IIS 7.5),我的网站无法触及.我添加了一个应用程序"MyApiTestsite".现在对/ api /或/ signalr/I的所有请求都要转发到端口8080:
http://mycompany/MyApiTestsite -> untouched
http://mycompany/MyApiTestsite/signalr/* -> http://mycompany:8080/signalr/*
http://mycompany/MyApiTestsite/api/* -> http://mycompany:8080/api/*
Run Code Online (Sandbox Code Playgroud)
我已经安装了ARR(这甚至是必要的吗?)和URL Rewrite.
这是我到目前为止的规则(对于SignalR):
<rule name="Rewrite SignalR to port 8080" patternSyntax="Wildcard" stopProcessing="true">
<match url="signalr/*" />
<serverVariables>
<set name="SERVER_PORT" value="8080" />
</serverVariables>
<action type="Rewrite" url="{R:0}" appendQueryString="true" logRewrittenUrl="false" />
</rule>
Run Code Online (Sandbox Code Playgroud)
我检查了日志文件,规则得到匹配.但是,它根本不起作用:
MyApiTestsite日志:
RULE_EVALUATION_END RuleName="Rewrite SignalR to port 8080", RequestURL="MyApiTestsite/signalr/hubs", QueryString="", StopProcessing="true", Succeeded="true"
URL_REWRITE_END RequestURL="/MyApiTestsite/signalr/hubs"
GENERAL_CHILD_REQUEST_START SiteId="4", RequestURL="http://mycompany:80/MyApiTestsite/signalr/hubs", RequestVerb="GET", RecursiveLevel="1"
Run Code Online (Sandbox Code Playgroud)
更新: 我现在根据这篇文章尝试过.但是,它仍然无效.URL似乎很好,但MvcHandler接管并返回404:
URL_REWRITE_END RequestURL ="http:// mycompany:8080/signalsr/hubs"
USER_SET AuthType ="",UserName ="",SupportsIsInRole ="true" …
我正在根据C#中的RFC4648寻找base64url的(快速)标准实现.
我发现HttpServerUtility.UrlTokenEncode但看起来这并不遵循RFC4648(UrlTokenEncode在末尾添加一个数字,表示=已删除的符号数量;请参阅此处和此处).
例:
base64编码:
Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE ="
base64url编码:
HttpServerUtility.UrlTokenEncode(System.Text.Encoding.ASCII.GetBytes( "AA")); //返回"QUE1",但我希望"QUE"
为了在一个地方定义我的环境变量,配置了一个运行 shell 脚本的任务。任务preLaunchTask在我的launch.json.
在我的 launch.json 中,我现在尝试引用我在脚本中配置的环境变量(如export AWS_REGION="eu-west-1")。
launch.json 如下所示:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
//..
"env": {
//"AWS_REGION": "us-east-1", //works
"AWS_REGION": "${env:AWS_REGION}", //doesn't work, why?
},
"args": [],
"preLaunchTask": "setupEnv",
}
] }
Run Code Online (Sandbox Code Playgroud) 在ASP.NET Web API控制器中,我想返回一个图像.为了流式传输图像,我需要一个MemoryStream.通常我会把它包装在一个using声明中,以确保它之后得到妥善处理.但是,因为这在异步中执行Task不起作用:
public class ImagesController : ApiController
{
private HttpContent GetPngBitmap(Stream stream)
{
var pngBitmapEncoder = new PngBitmapEncoder();
pngBitmapEncoder.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
return new StreamContent(stream);
}
// GET api/images
public Task<HttpResponseMessage> Get(string id, string path)
{
//do stuff
return Task.Factory.StartNew(() =>
{
var stream = new MemoryStream(); //as it's asynchronous we can't use a using statement here!
{
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = GetPngBitmap(stream)
};
response.Content.Headers.ContentType =
new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
return response; …Run Code Online (Sandbox Code Playgroud) OIDC不支持资源所有者密码凭据授予.为什么?我的一些客户端是可以安全维护凭据的安全设备......这些凭据可用于获取access_token.我还可以使用OpenID Connect吗?
如果在我的库中的证书和我检查与certutil该KeySpec设置为AT_SIGNATURE(我不得不因此重新导入).现在每当我导出证书(通过MMC或PowerShell)时,都会KeySpec被设置回AT_KEYEXCHANGE.我怎么能改变呢?
c# ×3
oauth-2.0 ×2
owin ×2
arr ×1
azure ×1
base64 ×1
google-oauth ×1
iis ×1
pfx ×1
self-hosting ×1
signalr ×1
swagger ×1
swagger-ui ×1
swashbuckle ×1
url-encoding ×1
urlencode ×1
using ×1
vscode-tasks ×1